码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA中的wait和notify

时间:2017-07-20 00:46:01      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:static   err   catch   syn   not   进入   led   tno   color   

 1 package com.runnabledemo;
 2 
 3 public class waitnotifydemo01 {
 4     public static void main(String[]args)throws Exception {
 5         final Object obj = new Object();
 6         Thread t1 = new Thread() {
 7             public void run() {
 8                 synchronized (obj) {
 9                     try {
10                         obj.wait();
11                         System.out.println("Thread 1 wake up.");
12                     } catch (InterruptedException e) {
13                     }
14                 }
15             }
16         };
17         t1.start();
18         Thread.sleep(1000);//We assume thread 1 must start up within 1 sec.
19         Thread t2 = new Thread() {
20             public void run() {
21                 synchronized (obj) {
22                     obj.notifyAll();
23                     System.out.println("Thread 2 sent notify.");
24                 }
25             }
26         };
27         t2.start();
28     }
29 }

输出结果为:

Thread 2 sent notify.
Thread 1 wake up.

 

分析:t1 启动后执行 obj.wait() 时,进入阻塞状态,让出时间片并释放锁,等待其他线程的唤醒。然后 t2 获取到 obj,并唤醒 t1,待 t2 执行完毕,释放锁后,t1 再继续执行。

notify()就是对对象锁的唤醒操作。但有一点需要注意的是notify()调用后,并不是马上就释放对象锁的,而是在相应的synchronized(){}语句块执行结束,自动释放锁后,JVM会在wait()对象锁的线程中随机选取一线程,赋予其对象锁,唤醒线程,继续执行。这样就提供了在线程间同步、唤醒的操作。

JAVA中的wait和notify

标签:static   err   catch   syn   not   进入   led   tno   color   

原文地址:http://www.cnblogs.com/XuGuobao/p/7208639.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!