Java中wait()与notify()方法的使用

3人阅读 评论(0) 收藏 举报
分类:

wait()、notify()方法介绍

1、wait()方法:让当前线程(持有锁的线程)处于等待(阻塞)的状态,并且释放它持有的锁。该线程将处于阻塞状态,直到其它线程调用notify()或者notifyAll()方法唤醒,线程进入就绪状态。

2、wait(long):让当前线程(持有锁的线程)处于等待(阻塞)的状态,直到其它线程调用notify()或者notifyAll()方法或者超过指定的时间,线程进入就绪状态。

3、notify():唤醒持有锁上的其中一个线程。让那个线程从等待状态变成就绪状态。

4、notifyAll():唤醒持有锁上的所有线程。让线程从等待状态变成就绪状态。

示例

public class ThreadDemo extends Thread{
	
	Object object = null;
	private String name ;
	public ThreadDemo(Object object,String name){
		this.object = object;
		this.name = name;
	}
	public void run()  {
		
		while(true){
			synchronized(object){
				try {
					Thread.sleep(1000);
					object.notify();//唤醒锁上的一个线程,被唤醒的线程处于就绪状态,等待被处理器调用
					System.out.println(name +"-----run");
					object.wait();//阻塞,释放锁
				}catch (Exception e) {
					e.printStackTrace();
				}
			} 
		}
	}
	
	
	public static void main(String[] args) {
		Object o = new Object();
		ThreadDemo thread1 = new ThreadDemo(o, "thread1");
		ThreadDemo thread2 = new ThreadDemo(o, "thread2");
		thread1.start();
		thread2.start();
		
	}
 }

执行结果:

thread1-----run
thread2-----run
thread1-----run
thread2-----run
thread1-----run
thread2-----run
thread1-----run
thread2-----run
thread1-----run



查看评论

Java架构师之路——Java中高阶知识精讲

Java架构师除了对软件顶层结构进行设计和搭建外,还需要负责对软件最核心基础的模块进行代码开发,而掌握Java中高级编码知识是完成这件事情的根本要素。本课程启迪学习者如何具备这样的能力。
  • 2017年03月15日 21:50

Java wait() notify()方法使用实例讲解

1)wait()、notify()和notifyAll()方法是本地方法,并且为final方法,无法被重写。   2)调用某个对象的wait()方法能让当前线程阻塞,并且当前线程必须拥有此对象的mon...
  • lingzhm
  • lingzhm
  • 2015-04-08 14:54:37
  • 26796

java线程的wait方法和notify方法的运用

一. java Thread类的几个函数的说明:  1.  setPriority( ): 设置线程的优先权;     2 . yield( ): 暂停线程的执行,给其它具有相同优先权的线程执行的...
  • liranke
  • liranke
  • 2013-10-01 18:24:53
  • 36779

Java wait、notify与synchronized的奇妙之处

synchronized是Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。synchronized就是针对内存区块申请内存锁。(1)JA...
  • chy555chy
  • chy555chy
  • 2016-08-22 19:26:57
  • 2681

Java Object对象中的wait,notify,notifyAll通俗理解

wait,notify,notifyAll 是定义在Object类的实例方法,用于控制线程状态。三个方法都必须在synchronized 同步关键字所限定的作用域中调用,否则会报错java.lang....
  • vk5176891
  • vk5176891
  • 2016-12-30 18:33:48
  • 2449

如何在 Java 中正确使用 wait, notify 和 notifyAl

wait, notify 和 notifyAll,这些在多线程中被经常用到的保留关键字,在实际开发的时候很多时候却并没有被大家重视。本文对这些关键字的使用进行了描述。 在 Java 中可以用 w...
  • JIESA
  • JIESA
  • 2016-04-20 21:13:52
  • 1515

Java中wait与notify的正确使用

今天编程时遇到一个wait方法调用时抛出IIIegalMonitorStateException异常,所以再把wait和notify的用法整理一遍。        首先,多线程同步问题既有多线程对资源...
  • xiaoxiaoyusheng2012
  • xiaoxiaoyusheng2012
  • 2017-01-04 20:05:08
  • 438

Java多线程中wait, notify and notifyAll的使用

在Java的Object类中有三个final的方法允许线程之间进行资源对象锁的通信,他们分别是: wait(), notify() and notifyAll()。 调用这些方法的当前线程必须拥有此...
  • luoweifu
  • luoweifu
  • 2015-06-27 22:36:37
  • 15690

使用Lock,wait/notify,Semaphore三种方式实现多线程通信

java的多线程通信有Lock,wait/notify,Semaphore三种方式,已一道常见面试题来简单演示这三种多线程通信方式。 两个线程循环间隔打印指定内容,一个打印从1到52的数字,一个打印从...
  • chjttony
  • chjttony
  • 2013-10-08 14:56:52
  • 7308

【Java并发编程】之十:使用wait/notify/notifyAll实现线程间通信的几点重要说明

在Java中,可以通过配合调用Object对象的wait()方法和notify()方法或notifyAll()方法来实现线程间的通信。在线程中调用wait()方法,将阻塞等待其他线程的通知(其他线程调...
  • mmc_maodun
  • mmc_maodun
  • 2013-12-09 22:09:26
  • 20589
    个人资料
    持之以恒
    等级:
    访问量: 1007
    积分: 193
    排名: 36万+
    文章分类
    文章存档