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