星空网 > 软件开发 > Java

java中的Condition协作线程接口类

Java的Condition接口中,存在的几个方法跟Synchronized中的wait(),waitall(),wait(time ^),这个几个方法一一对应起来,但是在Lock.newCondition()返回中可以指定指定的线程释放和等待资源。

请看【唤醒单个线程】实例:

package TestThread.TestCondition;import java.util.concurrent.locks.ReentrantLock;import java.util.concurrent.locks.*;public class TestCondition {	public static void main(String[] args) {		ReentrantLock lock = new ReentrantLock();		Condition condition = lock.newCondition();		Test1 th1 = new Test1(lock, condition, "线程1");		Test1 th2 = new Test1(lock, condition, "线程2");		Test1 th3 = new Test1(lock, condition, "线程3");		Test2 t2 = new Test2(condition, lock, "我是唤醒线程");		th1.start();		th2.start();		th3.start();		try {			Thread.sleep(1000);			t2.start();		} catch (InterruptedException e) {			e.printStackTrace();		}	}}class Test1 extends Thread {	private ReentrantLock lock;	private Condition condition1;	public Test1(ReentrantLock lock, Condition condition1, String name) {		super(name);		this.lock = lock;		this.condition1 = condition1;	}	@Override	public void run() {		for (int i = 0; i < 10; i++) {			try {				lock.lock();// 加锁				if (i == 5) {					try {						condition1.await();						System.out.println(Thread.currentThread().getName() + "当前线程获取到的值为:++++++++++++" + i);					} catch (InterruptedException e) {						System.out.println(Thread.currentThread().getName() + ":线程被中断了!");					}				} else {					System.out.println(Thread.currentThread().getName() + ":当前线程获取到的值为===》" + i);				}			} catch (Exception e) {				System.out.println("系统发生异常!");			} finally {				lock.unlock();// 解锁			}		}	}}class Test2 extends Thread {	private Condition condition;	public ReentrantLock lock;	/**	 * @param condition协作对象	 * @param lock锁对象	 * @param name线程名称	 */	public Test2(Condition condition, ReentrantLock lock, String name) {		super(name);		this.condition = condition;		this.lock = lock;	}	@Override	public void run() {		try {			lock.lock();// 加锁			condition.signal();// 唤醒启动单个线程			System.out.println(Thread.currentThread().getName() + ":已经唤醒了一个线程!");		} catch (Exception e) {			System.out.println(Thread.currentThread().getName() + ":线程挂了!");		} finally {			lock.unlock();// 解锁		}	}}

 


 

运行结果:2017-03-2501:16:17

java中的Condition协作线程接口类

 







原标题:java中的Condition协作线程接口类

关键词:JAVA

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流