国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

分析一段代碼理解main函數與子線程間的關系

2019-11-14 11:46:57
字體:
來源:轉載
供稿:網友

main函數和子線程之間的關系,一直搞不太明白,到底誰先執行:

(程序是引用別人的一段程序)

實現的功能:

編寫程序實現,子線程循環10次,接著主線程循環20次,接著再子線程循環10次,主線程循環20次,如此反復,循環5次.

public class Demo01 {	  public static void main(String[] args) {	       final Function f=new Function();	      new Thread(	              new Runnable(){	                  public void run() {	                      for(int i=0;i<5;i++){	                          f.sub();	                      }	                  }	              	              }	              ).start();	      System.out.PRintln("---1----");	      for(int i=0;i<5;i++){	          f.main();	      }	  }	}
//編寫功能類,實現子線程和主線程的功能class Function{  private boolean flag=false;  //子線程要實現的功能  public synchronized void sub(){	  System.out.println("---sub---");      while(flag){          try {              this.wait();          } catch (InterruptedException e) {              e.printStackTrace();          }      }                   for(int i=0;i<10;i++){          //for循環內定義子線程的功能,這里簡單的假設為打印一句話,主線程同理          System.out.println("sub"+i);      }            flag=true;      this.notify();  }  //主線程要實現的功能  public synchronized void main(){	  System.out.println("---main---");      while(!flag){          try {              this.wait();          } catch (InterruptedException e) {              e.printStackTrace();          }      }      for(int i=0;i<20;i++){          System.out.println("main"+i);      }            flag=false;      this.notify();  }  }

wait是讓使用wait方法的對象等待,暫時先把對象鎖給讓出來,給其它持有該鎖的對象用,其它對象用完后再告知(notify)等待的那個對象可以繼續執行了,因此,只有在synchronized塊中才有意義(否則,如果大家并不遵循同步機制,那還等誰呢?根本沒人排隊,也就談不上等待和喚醒了)

這段程序從main函數進入,然后new Thread一個線程,這個線程的創建使用了內部類的創建模式,new Thread(new Runnable(){public void run(){}}).start();,子線程就緒;此時main函數也是一個線程,相當于主線程,然后這兩個線程同時競爭cpu的處理時間,所以會出現也能先執行了sub,也可能先執行了main。此時不管先執行那個,在Function類中,都先執行sub。因為如果先執行了main,則主線程wait,進入阻塞狀態,把鎖讓出來;如果先執行sub,sub執行了10次之后notify了一下,釋放鎖。已備下次調用。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 彰武县| 柞水县| 酉阳| 泰安市| 大竹县| 隆化县| 井研县| 鹿泉市| 邯郸市| 西乡县| 温宿县| 都匀市| 重庆市| 苍南县| 蕉岭县| 广西| 屯门区| 许昌市| 治多县| 邓州市| 广元市| 肃宁县| 随州市| 汶川县| 巧家县| 金塔县| 塔河县| 封丘县| 莱西市| 六安市| 林甸县| 丘北县| 凤台县| 白朗县| 玉山县| 中超| 建昌县| 云和县| 卢龙县| 波密县| 黄冈市|