成都java开发培训
达内成都高升桥中心

13658085802

热门课程

Java线程同步简介

  • 时间:2016-08-26 11:10
  • 发布:成都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();
		}
	}
}

输出

(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();
		}
	/
上一篇:java世界学习地图
下一篇:dao、pojo及javabean

2016 年热门编程语言岗位需求及薪资分析

大公司喜欢问的Java集合类面试题

世界著名程序员职场建议

选择城市和中心
贵州省

广西省

海南省