|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
上一个类 下一个类 | 框架 无框架 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
java.lang.Object java.util.concurrent.Exchanger<V>
V
- 可以交换的对象类型public class Exchanger<V>
两个线程可以交换对象的同步点。每个线程都在进入 exchange
方法时给出某个对象,并接受其他线程返回时给出的对象。
用法示例:以下是重点介绍的一个类,该类使用 Exchanger 在线程间交换缓冲区,因此,在需要时,填充缓冲区的线程获得一个新腾空的缓冲区,并将填满的缓冲区传递给腾空缓冲区的线程。
class FillAndEmpty { Exchanger<DataBuffer> exchanger = new Exchanger(); DataBuffer initialEmptyBuffer = ... a made-up type DataBuffer initialFullBuffer = ... class FillingLoop implements Runnable { public void run() { DataBuffer currentBuffer = initialEmptyBuffer; try { while (currentBuffer != null) { addToBuffer(currentBuffer); if (currentBuffer.full()) currentBuffer = exchanger.exchange(currentBuffer); } } catch (InterruptedException ex) { ... handle ... } } } class EmptyingLoop implements Runnable { public void run() { DataBuffer currentBuffer = initialFullBuffer; try { while (currentBuffer != null) { takeFromBuffer(currentBuffer); if (currentBuffer.empty()) currentBuffer = exchanger.exchange(currentBuffer); } } catch (InterruptedException ex) { ... handle ...} } } void start() { new Thread(new FillingLoop()).start(); new Thread(new EmptyingLoop()).start(); } }
构造方法摘要 | |
---|---|
Exchanger()
创建一个新的 Exchanger。 |
方法摘要 | |
---|---|
V |
exchange(V x)
等待另一个线程到达此交换点(除非它被 中断 ),然后将给定的对象传送给该线程,并接收该线程的对象。 |
V |
exchange(V x,
long timeout,
TimeUnit unit)
等待另一个线程到达此交换点(除非它被 中断 ,或者超出了指定的等待时间),然后将给定的对象传送给该线程,同时接收该线程的对象。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
构造方法详细信息 |
---|
public Exchanger()
方法详细信息 |
---|
public V exchange(V x) throws InterruptedException
中断
),然后将给定的对象传送给该线程,并接收该线程的对象。
如果另一个线程已经在交换点等待,则出于线程调度目的,继续执行此线程,并接收当前线程传入的对象。当前线程立即返回,接收其他线程传递的交换对象。
如果还没有其他线程在交换点等待,则出于调度目的,禁用当前线程,且在发生以下两种情况之一前,该线程将一直处于休眠状态:
中断
当前线程。
如果当前线程:
中断
,
InterruptedException
,并且清除当前线程的已中断状态。
x
- 要交换的对象
InterruptedException
- 如果当前线程在等待时被中断public V exchange(V x, long timeout, TimeUnit unit) throws InterruptedException, TimeoutException
中断
,或者超出了指定的等待时间),然后将给定的对象传送给该线程,同时接收该线程的对象。
如果另一个线程已经在交换点上等待,则出于线程调度目的,继续执行此线程,并接收当前线程传入的对象。当前线程立即返回,并接收其他线程传递的交换对象。
如果还没有其他线程在交换点等待,则出于调度目的,禁用当前线程,且在发生以下三种情况之一前,该线程将一直处于休眠状态:
中断
当前线程;或者
如果当前线程:
中断
,
InterruptedException
,并且清除当前线程的已中断状态。
如果超出指定的等待时间,则抛出 TimeoutException
异常。如果该时间小于或等于零,则此方法根本不会等待。
x
- 要交换的对象timeout
- 要等待的最长时间unit
- timeout 参数的时间单位。
InterruptedException
- 如果当前线程在等待时被中断
TimeoutException
- 如果在另一个线程进入交换点之前已经到达指定的等待时间。
|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
上一个类 下一个类 | 框架 无框架 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策。