Java�е�notyfy()��notifyAll()�ı�������。本站提示廣大學習愛好者:(Java�е�notyfy()��notifyAll()�ı�������)文章只能為提供參考,不一定能成為您想要的結果。以下是Java�е�notyfy()��notifyAll()�ı�������正文
wait()������ʾ��������ǰ����Դ��ռ��Ȩ���Ȱ��Ȱ���һֱ�ȵ�����֪ͨ�ң��ҲŻ����к���Ĵ��롣
notify()������ʾ����ǰ���߳��Ѿ���������Դ��ռ�У�
֪ͨ�ȴ����߳�����ö���Դ��ռ��Ȩ������ֻ��һ���߳��ܹ���wait״̬�лָ���
Ȼ���������wait()�������䣻
notifyAll()������ʾ����ǰ���߳��Ѿ���������Դ��ռ�У�
֪ͨ���еĵȴ��̴߳�wait()���������俪ʼ���С�
����ʲô����û�У�
�����ӣ�����һ��nofiyAll()�����ӣ�
Java����
package com.thread.wait; public class Wait { private int counter = 0; private String name = null; public Wait(int counter,String name){ this.counter = counter; this.name = name; } public synchronized void doSomthing(){ int tempCounter = --counter; if(tempCounter <= 0){ customizedNotifyAll(); } else { while(tempCounter > 0){ try { System.out.println(Thread.currentThread().getName()+"-<"+name+tempCounter+">"+"will invoke WAIT()"); --tempCounter; wait(); } catch (InterruptedException e) { e.printStackTrace(); notifyAll(); } System.out.println(Thread.currentThread().getName()+"-<"+name+tempCounter+">"+"has been ACTIVED"); } customizedNotifyAll(); } } public void customizedNotifyAll(){ notifyAll(); System.out.println(Thread.currentThread().getName()+"-<"+name+counter+">"+"::"+"INVOKED NOTIFYALL() AND FINISHED"); } }
Java����
package com.thread.wait; public class TestThread implements Runnable { private Wait wait; public TestThread(Wait wait){ this.wait = wait; } public void run() { wait.doSomthing(); } public static void main(String [] args){ Wait wait = new Wait(4,"DAVID"); Thread t1 = new Thread(new TestThread(wait)); Thread t2 = new Thread(new TestThread(wait)); Thread t3 = new Thread(new TestThread(wait)); Thread t4 = new Thread(new TestThread(wait)); t1.start(); t2.start(); t3.start(); t4.start(); } }
���еĽ����
Thread-0-<DAVID3>will invoke WAIT() Thread-1-<DAVID2>will invoke WAIT() Thread-2-<DAVID1>will invoke WAIT() Thread-3-<DAVID0>::INVOKED NOTIFYALL() AND FINISHED Thread-0-<DAVID2>has been ACTIVED Thread-0-<DAVID2>will invoke WAIT() Thread-1-<DAVID1>has been ACTIVED Thread-1-<DAVID1>will invoke WAIT() Thread-2-<DAVID0>has been ACTIVED Thread-2-<DAVID0>::INVOKED NOTIFYALL() AND FINISHED Thread-0-<DAVID1>has been ACTIVED Thread-0-<DAVID1>will invoke WAIT() Thread-1-<DAVID0>has been ACTIVED Thread-1-<DAVID0>::INVOKED NOTIFYALL() AND FINISHED Thread-0-<DAVID0>has been ACTIVED Thread-0-<DAVID0>::INVOKED NOTIFYALL() AND FINISHED
�����˰ɣ�һ������notifyAll�������������еĵȴ��̶߳���ӵ���wait()�����ĵط���������������
������н������ÿ�ζ���һ������ʱ��ֻ�������߳�������ɶ����������߳��ڵȴ������̵߳���notifyAll()��������ʱ��ֻ�������߳�������ɣ�����һ�����ڵȴ��С�
���ڱ����ǽ���notify�Լ�notifyAll���������Զ������ԭ����Խ��͡�
Ȼ����notify()���������ӣ�
���ǽ�wait���е�customizedNotifyAll()�����е�notifyAll()��������notify()����
������
Thread-1-<DAVID3>will invoke WAIT() Thread-0-<DAVID2>will invoke WAIT() Thread-2-<DAVID1>will invoke WAIT() Thread-3-<DAVID0>::INVOKED NOTIFYALL() AND FINISHED Thread-1-<DAVID2>has been ACTIVED Thread-1-<DAVID2>will invoke WAIT()
Did you see that?���еĵȴ��߳��У�ֻ��һ���߳���������ˣ����������̻߳���ɵɵ�صȴ���poor guys!
ÿ�����еĽ���һ��������ʼ��ֻ��һ���߳��ܹ�������ɡ�
Summary��
notify()����ֻ����һ���̴߳�wait�лָ����������ھ������ĸ����Ǿ͵ÿ���Щ�̵߳�������(���������ȼ��������)������ִ�к������䣻
notifyAll()�����������е��̴߳�wait�лָ�����������ִ�к������䡣
����������С�����ҽ��ܵ�Java�е�notyfy()��notifyAll()�ı�������ϣ���Դ���������������������κ�������������ԣ�С��ἰʱ�ظ���ҵġ��ڴ�Ҳ�dz���л��ҶԽű�֮����վ��֧�֣�