zoukankan      html  css  js  c++  java
  • 记一下今天上下班学的Thread

    1 Thread 默认为前台线程,即主程序退出后,线程还可以继续(曾经就掉入这个坑中,使用两线程分别进行UDP收发,结果发线程结束了退出方法,收线程还在继续)

    2 Thread 没有可以暂停,可以重新启动,但是没有结束方法,使用Abort()方法强制销毁会抛异常。

    3 线程的等待用Join()实现

                List<Thread> threadList = new List<Thread>();
                for (int i = 0; i < 5; i++)
                {
                    string name = string.Format("btnThread_Click_{0}", i);
                    ThreadStart method = () => this.TestThread(name);
                    Thread thread = new Thread(method);//1 默认前台线程:程序退出后,计算任务会继续
                    thread.IsBackground = true;//2 后台线程:程序退出,计算立即结束
                    thread.Start();
                    threadList.Add(thread);
    
                    //ParameterizedThreadStart method = o => this.TestThread(o.ToString());
                    //Thread thread = new Thread(method);
                    //thread.Start(name);
                }
    
                foreach (Thread thread in threadList)
                {
                    thread.Join();
                }

    4 Thread 也没有回调和返回值,如果使用回调函数,需要手动实现

            /// <summary>
            /// 使用Thread 完成多线程回调
            /// </summary>
            /// <param name="method">要多线程执行的任务</param>
            /// <param name="callback">回调执行的任务</param>
    
            private void ThreadBeginInvoke(ThreadStart method, Action callback)
            {
                ThreadStart methodAll = new ThreadStart(() =>
                {
                    method.Invoke();
                    callback.Invoke();
                });
                Thread thread = new Thread(methodAll);
                thread.Start();
            }
    将偷懒进行到极致,是一个程序员的基本素养
  • 相关阅读:
    权值线段树&&可持久化线段树&&主席树
    扩展中国剩余定理(EXCRT)快速入门
    jquery学习记录
    隐藏vbs执行cmd命令的窗口
    eclipse打开出错 Error: opening registry key 'SoftwareJavaSoftJava Runtime Environment'
    正则表达式学习总结
    什么是xss攻击?
    什么是浏览器的同源策略?
    关于axios的封装
    关于递归。
  • 原文地址:https://www.cnblogs.com/bamboo-zhang/p/9142680.html
Copyright © 2011-2022 走看看