zoukankan      html  css  js  c++  java
  • AutoResetEvent

     private static readonly AutoResetEvent autoResetEvent = new AutoResetEvent(false);
            private static void Main()
            {
                try
                {
                    Console.WriteLine("{1}线程={0}", Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
                    Thread thread = new Thread(Method)
                    {
                        IsBackground = true
                    };
                    thread.Start();
                    autoResetEvent.WaitOne();
                    Console.WriteLine("Hello World");
                }
                catch (Exception ex)
                {
                    while (ex != null)
                    {
                        Console.WriteLine(ex.Message);
                        ex = ex.InnerException;
                    }
                }
                Console.ReadLine();
            }
    
            private static void Method()
            {
                Thread.Sleep(2000);
                Console.WriteLine("{1}线程={0}", Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
                autoResetEvent.Set();
            }
      private static readonly AutoResetEvent autoResetEvent = new AutoResetEvent(false);
            private static void Main()
            {
                try
                {
                    Console.WriteLine("{1}线程={0}", Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
                    Thread thread = new Thread(Method)
                    {
                        IsBackground = true
                    };
                    thread.Start();
                    bool flag = autoResetEvent.WaitOne(1000);//这里只等待1秒,但是线程里的Set需要2秒之后才执行
                    if (flag)
                    {
                        Console.WriteLine("Hello World");
                    }
                    autoResetEvent.WaitOne();//这里会受到上一次的Set的影响,可以直接执行
                    Console.WriteLine("Hello Chuck");
                    autoResetEvent.WaitOne();
                    Console.WriteLine("To be continued");
                }
                catch (Exception ex)
                {
                    while (ex != null)
                    {
                        Console.WriteLine(ex.Message);
                        ex = ex.InnerException;
                    }
                }
                Console.ReadLine();
            }
    
            private static void Method()
            {
                Thread.Sleep(2000);
                Console.WriteLine("{1}线程={0}", Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
                autoResetEvent.Set();
            }

    总结,AutoResetEvent在WaitOne之前需要先调用Reset,以防止之前某次超时之后,有其他地方调用了Set,那样会导致下一次的WaitOne可以直接进入

  • 相关阅读:
    记一次struts项目空指针异常
    struts2问题(已解决)java.nio.file.InvalidPathException: Illegal char <:> at index 3: jar:file:
    Road Map
    API
    Report of program history
    正则表达式验证用户信息
    RegExp( replace()的示例 )
    DOM与BOM部分示例
    伪类与伪元素
    第三次随笔(按钮外观改变)
  • 原文地址:https://www.cnblogs.com/chucklu/p/4941669.html
Copyright © 2011-2022 走看看