⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 transitiondetector.java

📁 java多线程编程实例_Source
💻 JAVA
字号:
public class TransitionDetector extends Object {
	private boolean value;
	private Object valueLock;
	private Object falseToTrueLock;
	private Object trueToFalseLock;

	public TransitionDetector(boolean initialValue) {
		value = initialValue;
		valueLock = new Object();
		falseToTrueLock = new Object();
		trueToFalseLock = new Object();
	}

	public void setValue(boolean newValue) {
		synchronized ( valueLock ) {
			if ( newValue != value ) {
				value = newValue;
				
				if ( value ) {
					notifyFalseToTrueWaiters();
				} else {
					notifyTrueToFalseWaiters();
				}
			}
		}
	}

	public void pulseValue() {
		// Sync on valueLock to be sure that no other threads 
		// get into setValue() between these two setValue() 
		// calls.
		synchronized ( valueLock ) {
			setValue(!value);
			setValue(!value);
		}
	}

	public boolean isTrue() {
		synchronized ( valueLock ) {
			return value;
		}
	}

	public void waitForFalseToTrueTransition() 
			throws InterruptedException {

		synchronized ( falseToTrueLock ) {
			falseToTrueLock.wait();
		}
	}

	private void notifyFalseToTrueWaiters() {
		synchronized ( falseToTrueLock ) {
			falseToTrueLock.notifyAll();
		}
	}

	public void waitForTrueToFalseTransition() 
			throws InterruptedException {

		synchronized ( trueToFalseLock ) {
			trueToFalseLock.wait();
		}
	}

	private void notifyTrueToFalseWaiters() {
		synchronized ( trueToFalseLock ) {
			trueToFalseLock.notifyAll();
		}
	}

	public String toString() {
		return String.valueOf(isTrue());
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -