IBM Java多线程 - 6.其它线程 API 详细信息
2008-09-23 13:51
417 查看
其它线程 API 详细信息
1. wait()、notify() 和 notifyAll() 方法
2. 线程优先级
3. 线程组
4. SwingUtilities
除了使用轮询(它可能消耗大量 CPU 资源,而且具有计时不精确的特征),
当对某个对象调用
这些方法是更复杂的锁定、排队和并发性代码的构件。但是,
与其使用
Thread API 让您可以将执行优先级与每个线程关联起来。但是,这些优先级如何映射到底层操作系统调度程序取决于实现。在某些实现中,多个 ― 甚至全部 ― 优先级可能被映射成相同的底层操作系统优先级。
在遇到诸如死锁、资源匮乏或其它意外的调度特征问题时,许多人都想要调整线程优先级。但是,通常这样只会把问题移到别的地方。大多数程序应该完全避免更改线程优先级。
虽然
正如前面提到的,Swing 应用程序有一个 UI 线程(有时叫称为事件线程),所有 UI 活动都必须在这个线程中发生。有时,另一个线程也许想要更新屏幕上某样东西的外观,或者触发 Swing 对象上的一个事件。
[/code]
对于 AWT 应用程序,
1. wait()、notify() 和 notifyAll() 方法
2. 线程优先级
3. 线程组
4. SwingUtilities
wait()、notify() 和 notifyAll() 方法 | 第 1 页(共4 页) |
Object类还包括一些方法,可以让线程相互通知事件的发生。
Object类定义了
wait()、
notify()和
notifyAll()方法。要执行这些方法,必须拥有相关对象的锁。
Wait()会让调用线程休眠,直到用
Thread.interrupt()中断它、过了指定的时间、或者另一个线程用
notify()或
notifyAll()唤醒它。
当对某个对象调用
notify()时,如果有任何线程正在通过
wait()等待该对象,那么就会唤醒其中一个线程。当对某个对象调用
notifyAll()时,会唤醒所有正在等待该对象的线程。
这些方法是更复杂的锁定、排队和并发性代码的构件。但是,
notify()和
notifyAll()的使用很复杂。尤其是,使用
notify()来代替
notifyAll()是有风险的。除非您确实知道正在做什么,否则就使用
notifyAll()。
与其使用
wait()和
notify()来编写您自己的调度程序、线程池、队列和锁,倒不如使用
util.concurrent包(请参阅参考资料),这是一个被广泛使用的开放源码工具箱,里面都是有用的并发性实用程序。JDK 1.5 将包括
java.util.concurrent包;它的许多类都派生自
util.concurrent。
线程优先级 | 第 2 页(共4 页) |
在遇到诸如死锁、资源匮乏或其它意外的调度特征问题时,许多人都想要调整线程优先级。但是,通常这样只会把问题移到别的地方。大多数程序应该完全避免更改线程优先级。
线程组 | 第 3 页(共4 页) |
ThreadGroup类原本旨在用于把线程集合构造成组。但是,结果证明
ThreadGroup并没有那样有用。您最好只使用
Thread中的等价方法。
ThreadGroup确实提供了一个有用的功能部件(
Thread中目前还没有):
uncaughtException()方法。线程组中的某个线程由于抛出了未捕获的异常而退出时,会调用
ThreadGroup.uncaughtException()方法。这就让您有机会关闭系统、将一条消息写到日志文件或者重新启动失败的服务。
SwingUtilities | 第 4 页(共4 页) |
SwingUtilities类不是
ThreadAPI 的一部分,但还是值得简单提一下。
正如前面提到的,Swing 应用程序有一个 UI 线程(有时叫称为事件线程),所有 UI 活动都必须在这个线程中发生。有时,另一个线程也许想要更新屏幕上某样东西的外观,或者触发 Swing 对象上的一个事件。
SwingUtilities.invokeLater()方法可以让您将
Runnable对象传送给它,并且在事件线程中执行指定的
Runnable。它的同类
invokeAndWait()会在事件线程中调用
Runnable,但
invokeAndWait()会阻塞,直到
Runnable完成执行之后。
void showHelloThereDialog() throws Exception { Runnable showModalDialog = new Runnable() { public void run() { JOptionPane.showMessageDialog(myMainFrame, "Hello There"); } }; SwingUtilities.invokeLater(showModalDialog); }
[/code]
对于 AWT 应用程序,
java.awt.EventQueue还提供了
invokeLater()和
invokeAndWait()。
相关文章推荐
- IBM Java多线程 - 5.同步详细信息
- java线程简介(同步详细信息)
- 【Java面试题】26 多线程有几种实现方法?同步有几种实现方法? 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
- c#中跨线程调用windows窗体控件 .我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题。然而我们并不能用传统方法来做这个问题,下面我将详细的介绍。
- IBM Java多线程 - 3.无处不在的线程
- Java 多线程(四)线程间的通信jdk1.5中Lock,Condition----各种锁的相关详细概念
- java线程简介(同步详细信息)
- Window API (七)多线程的创建、退出、传递线程信息
- 玩转java多线程学习篇三 线程的状态以及Thread类的API
- Java 多线程(四)线程间的通信jdk1.5中Lock,Condition----各种锁的相关详细概念
- Sqoop-1.4.6 mysql数据导出到HDFS提示;注: java使用或覆盖了已过时的 API。关详细信息, 请使用 -Xlint:deprecation 重新编译。
- Java快递物流查询接口,怎么接入物流接口API,如何根据单号查询物流跟踪的详细信息的Demo详细说明。
- IBM Java多线程 - 1. 线程基础
- java多线程之:线程对象一些api
- IBM Java多线程 - 2.线程的生命
- JAVA 多线程摘要--线程启动
- javaSE_8系列博客——重要的基础Java类——多线程--2--进程和线程
- Java线程中sleep和wait的区别详细介绍
- 多线程并发库高级应用 之 java5中的线程并发库--线程锁技术
- java中的IO处理和使用,API详细介绍(二)