java 多執行緒(1) wait和notifier例項
阿新 • • 發佈:2019-01-26
本程式為實現兩個執行緒來回呼叫,要求main執行緒呼叫100次,sub執行緒呼叫10次,以上步驟反覆50次。
主要思想是將控制執行緒同步的程式碼寫在資源類內,而不是run方法內
具體程式碼
Business.java
/**
* Created by lance on 2017/12/18.
*/
public class Business {
public static boolean isSub=false;//判斷是否輪到sub執行緒執行
public synchronized void sub(int i){
if(!isSub){
try {
this.wait();//等待main執行完喚醒自己
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for(int j=0;j<10;j++){
System.out.println("sub"+j+", loop "+i);
}
isSub=false;
this.notify();//喚醒main
}
public synchronized void main(int i){
if(isSub){
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for(int j=0;j<100;j++){
System.out.println(" Main"+j+", loop " +i);
}
isSub=true;
this.notify();
}
}
ThreadMain.java
public class ThreadMain extends Thread {
Business business;
public ThreadMain(Business business){
this.business=business;
}
@Override
public void run(){
for(int i=0;i<50;i++){
business.main(i);
}
}
}
ThreadSub.java
public class ThreadSub extends Thread{
Business business;
public ThreadSub(Business business){
this.business=business;
}
@Override
public void run(){
for(int i=0;i<50;i++){
business.sub(i);
}
}
}
Client.java
public class Client {
public static void main(String args[]){
Business business=new Business();
ThreadMain threadMain=new ThreadMain(business);
ThreadSub threadSub=new ThreadSub(business);
threadMain.start();
threadSub.start();
}
}