首页 > 编程语言 > 详细

Java Object 对象上的wait(),notify(),notifyAll()方法理解

时间:2017-07-27 11:53:16      阅读:285      评论:0      收藏:0      [点我收藏+]

第一阶段理解(2017-7-27):

Java 将wait(),notify(),notifyAll()方法放在Object对象上,也就是说任何一个对象都可以调用这个方法,这与”任何一个对象都有一个内置锁,可以用于线程同步“是照应的。因此,当某个线程要释放cpu争夺权,让自己进入等待状态时,调用 某个锁(对象)上的wait()方法,也就是让当前线程等待其它线程调用该锁上的notify()或notify()方法。线程间通过同步锁来实现等待与唤醒协作。简单例子:

 

 1 package com.lyyc.thread.sample;
 2 
 3 
 4 import org.junit.Test;
 5 
 6 public class ThreadStateSample {
 7     
 8     @Test
 9     public void test() throws Exception {
10         int threadCount=10;
11         Action action=new Action();
12     Thread[] actions=new Thread[threadCount];
13     for(int i=0;i<threadCount;i++){
14         actions[i]=new Thread(action);
15         actions[i].start();
16     }
17     
18     while(true){
19     for(Thread t:actions){
20         System.out.println(t.getName()+":"+t.getState());
21     }
22     Thread.sleep(2000);
23         synchronized (action.getLock()) { //首先的获得同步锁,才能调用该锁的wait()/notify()/notifyAll()方法 
24             action.getLock().notifyAll(); //锁对象上调用notifyAll(),同志其它线程进入Runnable状态
25         }
26     }
27     
28     }
29 }
30 
31 class Action implements Runnable{
32 
33     public Object lock=new Object();
34     public Object getLock(){
35         return lock;
36     }    
37     @Override
38     public void run() {
39         try {
40             synchronized (lock) {
41                 Thread.sleep(2000);
42                 lock.wait();
43             }
44         } catch (InterruptedException e) {
45             // TODO Auto-generated catch block
46             e.printStackTrace();
47         }
48     }
49 
50 }
51     

 

Java Object 对象上的wait(),notify(),notifyAll()方法理解

原文:http://www.cnblogs.com/guboju/p/7244051.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!