zoukankan      html  css  js  c++  java
  • 线程同步

    同步代码区域的方法:Lock、Monitor、MethodImplAttribute

      class Program
        {
           static object o = new object();
            static void Main(string[] args)
            {
    
                Thread thread1 = new Thread(Test);
                thread1.Start();
                Thread thread2 = new Thread(Test);
                thread2.Start();
    
                Console.ReadLine();
            }
    
            //[MethodImpl(MethodImplOptions.Synchronized)]
            static void Test()
            {
                Thread.Sleep(2000);
    
                //使用Lock
                //lock(o)
                //{
                //    for (int i = 0; i < 20; i++)
                //    {
                //        Console.WriteLine(i);
                //    }
                //}
    
                //使用Monitor
                Monitor.Enter(o);
                for (int i = 0; i < 20; i++)
                {
                    Console.WriteLine(i);
                }
                Monitor.Exit(o);
            }
        }
    

    属于托管线程池的线程(即其 IsThreadPoolThread 属性为 true 的线程)是后台线程。 从非托管代码进入托管执行环境的所有线程都被标记为后台线程。 通过创建并启动新的 Thread 对象而生成的所有线程都默认为前台线程。

    对某线程调用 Thread.Suspend 时,系统会注意到已经请求了线程挂起,并且会让该线程执行到一个安全点,然后才实际挂起该线程。 线程的安全点是线程执行过程中可执行垃圾回收的一个点。

    为了执行垃圾回收,运行时必须挂起除正在执行回收的线程以外的所有线程。 每个线程在可以挂起之前都必须置于安全点。

  • 相关阅读:
    zookeeper logs is missing zookeeper 日志丢失
    Java Spring IoC 学习(3)
    jsp中include的两种用法
    java多态
    Referenced file contains errors
    类的初始化顺序
    PHP处理session跨域
    Apache中按天分割日志(Windows)
    redis和memcached的区别(总结)
    PHP中的traits简单理解
  • 原文地址:https://www.cnblogs.com/goodlucklzq/p/4485669.html
Copyright © 2011-2022 走看看