java wait()方法notifyAll()方法
...wait()释放对象的锁,让出cpu,让其他的线程执行(同一个对象锁)
...notifyAll()方法是唤醒该对象上全部等待的线程
建立三个线程,A线程打印10次A,B线程打印10次B,C线程打印10次C,要求线程同时运行,交替打印10次ABC。这个问题用Object的wait(),notify()就可以很方便的解决。代码如下:
package com.thread;
class printData{
private static int index=0;
public synchronized void priA(){
while(index%3!=0){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("A");
index++;
this.notifyAll();
}
public synchronized void priB(){
while(index%3!=1){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("B");
index++;
this.notifyAll();
}
public synchronized void priC(){
while(index%3!=2){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("C");
index++;
this.notifyAll();
}
}
public class DataShareDeo {
public static void main(String[] args) {
final printData data= new printData();
new Thread(new Runnable(){
public void run() {
for(int i=0;i<10;i++){
data.priA();
}
}
}).start();
new Thread(new Runnable(){
public void run() {
for(int i=0;i<10;i++){
data.priB();
}
}
}).start();
new Thread(new Runnable(){
public void run() {
for(int i=0;i<10;i++){
data.priC();
}
}
}).start();
}
}