.Net实现多线程基础概念
.NET中如何实现多线程:
线程肯定也是要执行一段代码的,所以要产生一个线程,必须先为该线程写一个方法,这个方法中的代码就是该线程运行所要执行的代码,线程启动时,通过委托调用该方法
Thread threadFirst = new Thread(ThreadStart start); // 创建线程 ThreadStart start是一个无返回值无参数的委托
threadFirst.Start(); // 启动线程,标记该线程可以被CUP执行了,但具体执行时间由CPU决定
Thread threadFirst = new Thread(ParameterizedThreadStart start); // 创建带object参数的委托
threadFirst.Start(object param); // 传入参数并设为启动
前台线程:只有所有的前台线程都关闭时,才能完成程序的关闭,默认为前台线程
后台线程:只要所有的前台线程结束,后台线程自动结束
threadFirst.IsBackground = true; // 设置为后台线程
方法重入时,当在子线程(非UI线程)中修改一个控件的值时,会出现异常。
最简单的解决方法:TextBox.CheckForIllegalCrossThreadCalls = false; //关闭对文本框的非法跨线程操作检查
线程的调度方式
1.非抢占式调度:指某个线程在运行时不会被操作系统强制暂停,它可以持续地运行直至运行告一段落井主动地交出运行权。在这样的调度模式之下,线程的运行就完全是单队列的,并且可能产生恶意程序长期霸占运行权的情况。而且一旦一个程序死了,那么整个电脑就只好重启啦~~!
2.抢占式调度:指每个线程都只有极少的运行时间(在Windows内核模式下这个时间不会超过20ms ),而当时间用完时该线程就会被强制暂停,保存上下文并把CPU运行权利交给下一个线程,这样调度的结果就是所有的线程都在被快速地切换运行,使得使用者感觉所有的线程在"并行"运行。
浙公网安备 33010602011771号