使用线程的一个常见问题就是如何能够在一个线程开始运行之前,适当地将它初始化.初始化最常见的理由就是为了调整优先权.另一个理由是为了在SMP 系统中设定线程比较喜欢的 CPU.第10 章谈到 MFC 时我们会看到其他一些理由.    基本问题在于,你需要一个线程 handle,才能够调整线程的性质.但如果你以默认型式调用 CreateThread(),新线程会如脱缰野马一下子就起跑了,你根本来不及进行初始化设定操作.    解决之道就是 CreateThread() 的第5个参数,它允许你指定线程…
有没有过这样的经验?你坐在你的车子里,目的地还在好几公里之遥,而时间已经很晚了.你拼命想告诉那些挡住你去路的人们,今天这个约会对你是多么多么重要,能不能请他们统统--呃--滚到马路外?很不幸,道路系统并没有纳入所谓的优先权观念.如果有某条专用道是给"非常重要"的通行所用的,你就可以摆脱那些如潮水般在你四周的车辆和行人,岂不甚妙?    Win32 有所谓的优先权(priority)观念,用以决定下一个获得 CPU 时间的线程是谁.较高优先权的线程必然获得较多的 CPU 时间.关于优先权…
干净的终止一个线程  我曾经在第2章产生一个后台线程,用以输出一张屏幕外的 bitmap 图.我们必须解决的一个最复杂的问题就是,如果用户企图结束程序,而这张bitmap 图尚未完成,怎么办?第2章的一个鸵鸟做法就是在任何 worker 线程还没完成其工作之前,不准用户结束程序.只要修改主消息循环,使消息循环不得在任何一个 worker 线程尚未结束之前结束,即可办到.这种做法的最大优点就是"简单",但万一 bitmap 图十分复杂,需要很长的工作时间,那么程序有可能看起来像是&quo…
这一章描述如何初始化一个新线程,如何停止一个执行中的线程,以及如何了解并调整线程优先权.    读过这一章之后,你将有能力回答一个 Win32 多线程程序设计的最基本问题.你一定曾经在 Usenet 的 Win32 论坛中一再地看过这个问题.当我开始在 Win32 上使用线程时,这个问题就一直在折磨我.我花了数天甚至数周的时间来寻找答案,并且希望找到的是一个好答案.    这个问题是:  我如何在某个线程内终止另一个正在运行的线程? 我们将在这一章看到答案,以及诸如"在一个线程中控制其他线程&q…
使用Condition Variables实现一个线程安全队列 测试机: i7-4800MQ .7GHz, logical core, physical core, 8G memory, 256GB SSD, -bit windows compiler: VS2010, boost 1.44 性能测试结果: case1: 9百万数据, 生产者,3消费者,12秒 ::,[INFO]: =============================== Started =================…
启动一个线程是用run()还是start()? 答:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行.这并不意味着线程就会立即运行.run()方法可以产生必须退出的标志来停止一个线程.…
任务是一组逻辑工作单元,而线程则是使任务异步执行的机制.在Java中,Runnable对象代表一个任务,Thread对象负责创建一个线程执行这个任务. 前提:1. 程序需要处理大量任务 2. 任务的执行时间相对创建线程和销毁的时间较短 方法1: while (ture) { Socket connection = socket.accept(); handleTask(connection); //单线程处理所用任务 方法2: while (true) { final Socket connec…
问题一:多线程有几种实现方法?同步有几种实现方法? 多线程有两种实现方法,分别是继承Thread类与实现Runnable接口   同步的实现方面有两种,分别是synchronized,wait与notify   wait():使一个线程处于等待状态,并且释放所持有的对象的lock.sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常.notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒…
自己在做实验性小项目的时候,发现自己遇到一个问题:如何控制线程的"死亡"? 首先,如何开启一个线程呢? 最简单的代码: public class Main { public static void main(String[] args) { Thread thread = new Thread(new Runnable() { @Override public void run() { System.out.println("当前线程:" + Thread.curr…
1,线程组定义: 线程组存在的意义,首要原因是安全.java默认创建的线程都是属于系统线程组,而同一个线程组的线程是可以相互修改对方的数据的.但如果在不同的线程组中,那么就不能"跨线程组"修改数据,可以从一定程度上保证数据安全.默认情况下,我们创建的线程都在系统线程组,不过我们可以自定义自己的线程组. 线程组内部可以有线程组,组中还可以有线程,类似于下图:…