Home >Java >javaTutorial >Condition cooperative thread interface class in java

Condition cooperative thread interface class in java

迷茫
迷茫Original
2017-03-26 16:01:252205browse

In Java's Condition interface, there are several methods that correspond to wait(), waitall(), wait(time ^) in Synchronized. These methods correspond one to one, but in In the return of Lock.newCondition(), you can specify the specified thread to release and wait for resources.

Please see [Wake up a single thread] example:

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();// 解锁
		}
	}
}

Running result: 2017-03-2501:16:17

The above is the detailed content of Condition cooperative thread interface class in java. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article:Summary of JAVA classesNext article:Summary of JAVA classes