zoukankan      html  css  js  c++  java
  • C# Thread、lock

    lock结论:

    关于lock有下面几点需要注意的地方

    1、lock的是引用类型的对象,string类型除外。

    2、lock推荐的做法是使用静态的、只读的、私有的对象。

    3、保证lock的对象在外部无法修改才有意义,如果lock的对象在外部改变了,对其他线程就会畅通无阻,失去了lock的意义。

    另外没有unlock,在lock(){ }代码段后,会自动解锁

    class Program
        {
            private static readonly object obj = new object();
    
            static void Main(string[] args)
            {
                Thread th1 = new Thread(TestLock);
                Thread th2 = new Thread(TestLock1);
                th1.IsBackground = true;
                th2.IsBackground = true;
                th2.Start();
                th1.Start();
    
                #region 按任意键继续
    
                Console.Write("按任意键继续!");
                //此代码会提示用户按任意键,然后在用户按键前暂停程序。
                Console.ReadKey(true);
    
                #endregion 按任意键继续
            }
    
            private static void TestLock()
            {
                lock (obj)
                {
                    for (int i = 0; i < 10000; i++)
                    {
                        var message = i.ToString();
                        string logFileName = @"F:Log" + DateTime.Now.ToString("yyyyMMdd") + "Log" + ".txt";
                        StreamWriter sr = new StreamWriter(logFileName, true);
                        try
                        {
                            sr.WriteLine(message);
                        }
                        catch
                        {
                            Console.WriteLine(message);
                        }
                        finally
                        {
                            sr.Close();
                        }
                    }
                }
            }
    
            private static void TestLock1()
            {
                lock (obj)
                {
                    for (int i = 10000; i < 20000; i++)
                    {
                        var message = "Count:" + i.ToString();
                        string logFileName = @"F:Log" + DateTime.Now.ToString("yyyyMMdd") + "Log" + ".txt";
                        StreamWriter sr = new StreamWriter(logFileName, true);
                        try
                        {
                            sr.WriteLine(message);
                        }
                        catch
                        {
                            Console.WriteLine(message);
                        }
                        finally
                        {
                            sr.Close();
                        }
                    }
                }
            }
    
            
        }

    参考:https://www.cnblogs.com/gygtech/p/10070674.html

  • 相关阅读:
    JavaScript事件基础知识总结【思维导图】
    浮动广告 相关源码
    网页设计中常用的Web安全字体
    WEB 字体
    js文件被浏览器缓存的思考
    HTML5 LocalStorage
    CXF 中自定义SOAPHeader
    CXF拦截器(Interceptor)LoggingInInterceptor
    WebService注解汇总
    spring websocket 和socketjs实现单聊群聊,广播的消息推送详解
  • 原文地址:https://www.cnblogs.com/pu369/p/12372242.html
Copyright © 2011-2022 走看看