程序的跨平臺性:除了可以運行,還必須保證運行的結果。

第二種方式:編程

Class MyThread  implements Runnable{併發

  Public  void run(){spa

  Runnable target=new MyThread();操作系統

  Thread t3=new Thread(target);線程

  Thread.start();//啓動線程繼承

}接口

}隊列

P384:經過接口實現繼承進程

 

練習:寫兩個線程:ci

①  輸入200個「###」②輸入200個「***」

 

下面爲線程中的7中很是重要的狀態:(有的書上也只有認爲前五種狀態:而將「鎖池」和「等待隊列」都當作是「阻塞」狀態的特殊狀況:這種認識也是正確的,可是將「鎖池」和「等待隊列」單獨分離出來有利於對程序的理解)

       
   
     
 

 

 

 

                  ①              ⑴

                 ②                   ⑵

                ③                        ⑶             run()結束

    Start()

                           OS分配CPU

 
   

 

 

                        CPU時間片結束

                             yield()                      o.wait()

                                            等待鎖標記

 
   

 

 

 

                                                 notify()

注意:圖中標記依次爲

①輸入完畢;②wake up③t1退出

⑴如等待輸入(輸入設備進行處理,而CUP不處理),則放入阻塞,直到輸入完畢。

⑵線程休眠sleep()

⑶t1.join()指中止main(),而後在某段時間內將t1加入運行隊列,直到t1退出,main()才結束。

特別注意:①②③與⑴⑵⑶是一一對應的。

 

進程的休眠:Thread sleep(1000);//括號中以毫秒爲單位

main()運行完畢,即便在結束時時間片尚未用完,CPU也放棄此時間片,繼續運行其餘程序。

Try{Thread.sleep(1000);}

Catch(Exception e){e.printStackTrace(e);}

T1.join()表示運行線程放棄執行權,進入阻塞狀態。

t1結束時,main()能夠從新進入運行狀態。

T1.join其實是把併發的線程編程並行運行。

線程的優先級:1-10,越大優先級越高,優先級越高被OS選中的可能性就越大。(不建議使用,由於不一樣操做系統的優先級並不相同,使得程序不具有跨平臺性,這種優先級只是粗略地劃分)。

注:程序的跨平臺性:除了可以運行,還必須保證運行的結果。

 

一個使用yield()就立刻交出執行權,回到可運行狀態,等待OS的再次調用。

相關文章
相關標籤/搜索