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

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

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

2019-11-14 12:16:56
字體:
來源:轉載
供稿:網友

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


上一篇:PYTHON 下劃線作用

下一篇:錯誤票據

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阿荣旗| 广宗县| 鄯善县| 抚远县| 馆陶县| 太原市| 岳阳市| 绍兴市| 丰原市| 夹江县| 林西县| 安阳县| 格尔木市| 珠海市| 宜良县| 牙克石市| 黄骅市| 三原县| 广南县| 长宁县| 逊克县| 呈贡县| 河北区| 昂仁县| 固镇县| 河东区| 永昌县| 兰坪| 乐山市| 南投县| 高碑店市| 北辰区| 独山县| 淮滨县| 漯河市| 内黄县| 东兴市| 松桃| 吕梁市| 保山市| 龙井市|