大漠駝鈴

          置身浩瀚的沙漠,方向最為重要,希望此blog能向大漠駝鈴一樣,給我方向和指引。
          Java,Php,Shell,Python,服務器運維,大數據,SEO, 網站開發、運維,云服務技術支持,IM服務供應商, FreeSwitch搭建,技術支持等. 技術討論QQ群:428622099
          隨筆 - 238, 文章 - 3, 評論 - 117, 引用 - 0
          數據加載中……

          Java 線程學習(3):sleep()和join()方法

            sleep方法會使當前的線程暫停執行一定時間(給其它線程運行機會)。讀者可以運行示例1,看看結果就明白了。sleep方法會拋出異常,必須提供捕獲代碼。
          實例一:
          public class ThreadTest implements Runnable{
           public void run(){
           
          for(int k=0;k<5;k++){
           
          if(k==2){
           
          try{
           Thread.currentThread().sleep(
          5000);
           }
           
          catch(Exception e){}
           }
           System.out.println(Thread.currentThread().getName()
           
          +":"+k);
           }
           }
           public static void main(String[] args){
           Runnable r
          =new ThreadTest();
           Threadt 1
          =new Thread(r,"t1_name");
           Threadt 2
          =new Thread(r,"t2_name");
           t1.setPriority(Thread.MAX_PRIORITY);
           t2.setPriority(Thread.MIN_PRIORITY);
           t1.start();
           t2.start();
           }
          }
          t1被設置了最高的優先級,t2被設置了最低的優先級。t1不執行完,t2就沒有機會執行。但由于t1在執行的中途休息了5秒中,這使得t2就有機會執行了。

          實例二:
          public class ThreadTest implements Runnable{
           public synchronized void run(){
           
          for(int k=0;k<5;k++){
           
          if(k==2){
           
          try{
           Thread.currentThread().sleep(
          5000);
           }
           
          catch(Exceptione){}
           }
           System.out.println(Thread.currentThread().getName()
           
          +":"+k);
           }
           }
           publicstaticvoidmain(String[]args){
           Runnable r
          =new ThreadTest();
           Threadt 1
          =new Thread(r,"t1_name");
           Threadt 2
          =new Thread(r,"t2_name");
           t1.start();
           t2.start();
           }
          }
          請讀者首先運行示例程序,從運行結果上看:一個線程在sleep的時候,并不會釋放這個對象的鎖標志。


          join()方法:
          join()方法,它能夠使調用該方法的線程在此之前執行完畢。
          實例a
          public class ThreadTest implements Runnable{
           
          public static int a=0;
           
          public void run(){
           
          for(intk=0;k<5;k++){
           a
          =a+1;
           }
           }
           
          public static void main(String[] args){
           Runnable r
          =new ThreadTest();
           Thread t
          =new Thread(r);
           t.start();
           System.out.println(a);
           }
          }
          運行結果不一定是5, 如果想讓 輸出的結果是5, 需要運用join,
          把上面的代碼改成如下:
          public class ThreadTest implements Runnable{
           
          public static int a=0;
           
          public void run(){
           
          for(intk=0;k<5;k++){
           a
          =a+1;
           }
           }
           
          public static void main(String[] args){
           Runnable r
          =new ThreadTest();
           Thread t
          =new Thread(r);
           t.start();
               t.join();
           System.out.println(a);
           }
          }
          測試一下以上的代碼即可,答案為輸出5.join()方法會拋出異常,應該提供捕獲代碼。或留給JDK捕獲。

          posted on 2009-02-26 19:44 草原上的駱駝 閱讀(477) 評論(0)  編輯  收藏 所屬分類: JAVA基礎知識

          主站蜘蛛池模板: 岳阳市| 滁州市| 寿宁县| 富阳市| 定远县| 交口县| 明星| 蓬溪县| 育儿| 无为县| 晴隆县| 吴桥县| 林西县| 宝应县| 缙云县| 正阳县| 南乐县| 彭阳县| 衡水市| 北辰区| 祁连县| 正安县| 延川县| 河源市| 抚州市| 彰化县| 乃东县| 九江县| 汽车| 丰都县| 灵丘县| 珠海市| 二手房| 漳浦县| 吴堡县| 中卫市| 凌海市| 方城县| 天全县| 察雅县| 福安市|