大漠駝鈴

          置身浩瀚的沙漠,方向最為重要,希望此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 草原上的駱駝 閱讀(469) 評論(0)  編輯  收藏 所屬分類: JAVA基礎知識

          主站蜘蛛池模板: 克拉玛依市| 海丰县| 西青区| 定边县| 东辽县| 兰州市| 祁阳县| 普定县| 焦作市| 鸡泽县| 宁陕县| 抚州市| 南宁市| 霍城县| 阿鲁科尔沁旗| 高邑县| 饶阳县| 苍山县| 乐平市| 来凤县| 高青县| 阿拉善左旗| 灌阳县| 绥化市| 辉南县| 祁连县| 嘉禾县| 含山县| 裕民县| 松滋市| 垣曲县| 郸城县| 黄骅市| 铜川市| 莱阳市| 洛川县| 中阳县| 弋阳县| 平南县| 汉阴县| 佛学|