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

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

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

2019-11-14 13:04:14
字體:
來源:轉載
供稿:網友

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了一下,釋放鎖。已備下次調用。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 唐海县| 隆德县| 花垣县| 西充县| 察隅县| 淅川县| 绥滨县| 大渡口区| 乃东县| 通化县| 望江县| 昂仁县| 临湘市| 新密市| 平邑县| 海淀区| 会同县| 舞钢市| 敖汉旗| 沁源县| 蚌埠市| 格尔木市| 驻马店市| 广河县| 乌兰浩特市| 尉氏县| 民权县| 丘北县| 景洪市| 拉萨市| 腾冲县| 大冶市| 屯留县| 若尔盖县| 湟中县| 宜都市| 伊宁市| 启东市| 九江县| 泰宁县| 丽水市|