java多執行緒結合單例模式例項,簡單實用易理解

sshxdwy發表於2015-09-16

最近接觸到多執行緒,為了弄清原理,寫了以下程式碼:


新建以下類:

 /**
 * 多執行緒執行順序測試
 * 
 */
public class ThreadTest {
public static void main(String[]args) throws InterruptedException{

for(int i = 0;i<1;i++){
  // if(i==0){
     new DataDeal().dealData(String.valueOf(i));
 //  }
System.out.println("主執行緒:i="+i);
System.out.println("主執行緒顯示子執行緒此時的資料是:子執行緒"+DataDeal.threadNumOfDataDeal+DataDeal.sonR);
//Thread.sleep(1000);
}
for(int j=0;j<20;j++){
Thread.sleep(2000);
//System.out.println("主執行緒顯示子執行緒此時的資料是..:子執行緒"+DataDeal.threadNumOfDataDeal+DataDeal.sonR);
System.out.println("主執行緒顯示子執行緒此時的資料是..:子執行緒"+DataDeal.threadNumOfDataDeal+Result.getInstance().getSonThreadr());
//判斷子執行緒執行狀態,“0”表示子執行緒執行結束,如果子執行緒執行結束,則主執行緒跳出迴圈顯示,也結束
if(Result.getInstance().getSonTheadState().equals("0")){
break;
}
}
System.out.println("主執行緒執行完畢");
}
}


public class DataDeal {
public static String sonR;
public static String threadNumOfDataDeal;
private String threadNum2;
public void dealData(String threadNum){
threadNumOfDataDeal = threadNum;
this.threadNum2 = threadNum;
new Thread(new Runnable(){
public void run(){
Result.getInstance().setSonTheadState("1");//將子執行緒執行狀態設為“1”,表示子執行緒啟動
try {
for(int i = 0;i<5;i++){
for(int j = 0;j<5;j++){
Thread.sleep(1000);
sonR = "["+i+"]["+j+"]";
Result.getInstance().setSonThreadr("["+i+"]["+j+"]");
//System.out.println("子執行緒"+threadNum2+"。。。。。。"+sonR);

}
}
System.out.println("子執行緒"+threadNum2+"執行完畢");
Result.getInstance().setSonTheadState("0");//將子執行緒執行狀態設為“0”,表示子執行緒執行結束
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("子執行緒異常");
Result.getInstance().setSonTheadState("0");//將子執行緒執行狀態設為“0”,表示子執行緒執行結束
}
}
}).start();
}
}


public class Result {
private String sonThreadr;//子執行緒執行時資料
private String sonTheadState;//子執行緒執行狀態:0執行結束;1正在執行

//採用單例模式
private Result(){}
private static Result r;

public static Result getInstance(){
if(r == null)
r = new Result();
return r;
}


public String getSonTheadState() {
return sonTheadState;
}


public void setSonTheadState(String sonTheadState) {
this.sonTheadState = sonTheadState;
}


public String getSonThreadr() {
return sonThreadr;
}


public void setSonThreadr(String sonThreadr) {
this.sonThreadr = sonThreadr;
}

}


相關文章