Java线程同步简介
当前位置:以往代写 > JAVA 教程 >Java线程同步简介
2019-06-14

Java线程同步简介

Java线程同步简介

一、要领先容

1、void wait()

使得线程进入期待状态,直到它被其他线程通过notify()可能notifyAll叫醒。该要领只能在同步要领(void synchronized methodName( args… ){ … })可能 “同步块内部“ (synchronized(object){ … })被挪用。假如当前线程不是锁的持有者,该要了解抛出一个IllegalMonitorStateException异常。

即假如锁住的是object,那么你只能挪用object的wait()要领。

2、void notify()

随机选择一个在该工具上挪用wait要领的线程,清除其阻塞状态。该要领只能在同步要领(void synchronized methodName( args… ){ … })可能 “同步块内部“ (synchronized(object){ … })被挪用。假如当前线程不是锁的持有者,该要了解抛出一个IllegalMonitorStateException异常。

3、void notifyAll()

清除所有那些在该工具上挪用wait要领的线程的阻塞状态。该要领只能在同步要领(void synchronized methodName( args… ){ … })可能 “同步块内部“ (synchronized(object){ … })被挪用。假如当前线程不是锁的持有者,该要了解抛出一个IllegalMonitorStateException异常。

二、典型讲授( 留意测试类A只能声明为外部类,下面代码在 class A 和 main要领 之间 省略了MainClass { … } )

1、“同步块”测试

(1)加synchronized(){}

class A{}
public static void main(String[] args) {
	A object = new A();
	System.out.println("Main Thread Id = " + Thread.currentThread().getId());
	synchronized (object) {
		try {
			System.out.println("This Thread Id = " + Thread.currentThread().getId());
			object.wait();
		} catch (InterruptedException e) {
			</span>e.printStackTrace();
		}
	}
}

输出

Java线程同步简介

(2)不加synchronized(){}

class A{}
public static void main(String[] args) {
	A object = new A();
	System.out.println("Main Thread Id = " + Thread.currentThread().getId());
	//synchronized (object) {
		try {
			</span>System.out.println("This Thread Id = " + Thread.currentThread().getId());
			</span>object.wait();
		} catch (InterruptedException e) {
			</span>e.printStackTrace();
		}
	/

URL:http://www.bianceng.cn/Programming/Java/201608/50367.htm

    关键字:

在线提交作业