线程组
线程是被个别创建的但可以将它们归类到线程组中以便于调试和监视只能在创建线程的同时将它与一个线程组相关联在使用大量线程的程序中使用线程组组织线程可能很有帮助可以将它们看作是计算机上的目录和文件结构
线程间发信
当线程在继续执行前需要等待一个条件时仅有 synchronized 关键字是不够的虽然 synchronized 关键字阻止并发更新一个对象但它没有实现线程间发信Object 类为此提供了三个函数wait()notify() 和 notifyAll()以全球气候预测程序为例这些程序通过将地球分为许多单元在每个循环中每个单元的计算都是隔离进行的直到这些值趋于稳定然后相邻单元之间就会交换一些数据所以从本质上讲在每个循环中各个线程都必须等待所有线程完成各自的任务以后才能进入下一个循环这个模型称为 屏蔽同步下例说明了这个模型
屏蔽同步
数 notify() 只通知一个正在等待的线程当对每次只能由一个线程使用的资源进行访问限制时这个函数很有用但是不可能预知哪个线程会获得这个通知因为这取决于 Java 虚拟机 (JVM) 调度算法
将 CPU 让给另一个线程
当线程放弃某个稀有的资源(如数据库连接或网络端口)时它可能调用 yield() 函数临时降低自己的优先级以便某个其他线程能够运行
守护线程
有两类线程用户线程和守护线程用户线程是那些完成有用工作的线程 守护线程是那些仅提供辅助功能的线程Thread 类提供了 setDaemon() 函数Java 程序将运行到所有用户线程终止然后它将破坏所有的守护线程在 Java 虚拟机 (JVM) 中即使在 main 结束以后如果另一个用户线程仍在运行则程序仍然可以继续运行