當前位置:才華齋>計算機>java語言>

java單執行緒多執行緒的實現與方法

java語言 閱讀(2.81W)

java中有幾種方法可以實現一個執行緒?用什麼關鍵字修飾同步方法?

java單執行緒多執行緒的實現與方法

stop()和suspend()方法為何不推薦使用? java5以前,有如下兩種:第一種:new Thread(){}t();這表示呼叫Thread子類物件的run方法,new Thread(){}表示一個Thread的匿名子類的例項物件,子類加上run方法後的程式碼如下:new Thread(){ public void run(){ } }t();第二種:new Thread(new Runnable(){})t();這表示呼叫Thread物件接受的Runnable物件的run方法,new Runnable(){}表示一個Runnable的匿名子類的例項物件,runnable的子類加上run方法後的程式碼如下:new Thread(new Runnable(){ public void run(){ } })t(); 從java5開始,還有如下一些執行緒池建立多執行緒的方式:ExecutorService pool = ixedThreadPool(3) for(int i=0;i<10;i++){ ute(new Runable(){public void run(){}}); } achedThreadPool()ute(new Runable(){public void run(){}});ingleThreadExecutor()ute(new Runable(){public void run(){}});前兩種實現方法,分別使用new Thread()和new Thread(runnable)形式,第一種直接呼叫thread的run方法,所以,我們往往使用Thread子類,即new SubThread()。第二種呼叫runnable的run方法。後兩種實現方法,分別是繼承Thread類與實現Runnable介面 用synchronized關鍵字修飾同步方法 反對使用stop(),是因為它不安全。它會解除由執行緒獲取的所有鎖定,而且如果物件處於一種不連貫狀態,那麼其他執行緒能在那種狀態下檢查和修改它們。結果很難檢查出真正的問題所在。suspend()方法容易發生死鎖。呼叫suspend()的時候,目標執行緒會停下來,但卻仍然持有在這之前獲得的鎖定。此時,其他任何執行緒都不能訪問鎖定的資源,除非被"掛起"的執行緒恢復執行。對任何執行緒來說,如果它們想恢復目標執行緒,同時又試圖使用任何一個鎖定的資源,就會造成死鎖。所以不應該使用suspend(),而應在自己的Thread類中置入一個標誌,指出執行緒應該活動還是掛起。若標誌指出執行緒應該掛起,便用wait()命其進入等待狀態。若標誌指出執行緒應當恢復,則用一個notify()重新啟動執行緒。

java中執行緒的基本概念、執行緒的基本狀態以及狀態之間的關係

一個程式中可以有多條執行線索同時執行,一個執行緒就是程式中的一條執行線索,每個執行緒上都關聯有要執行的程式碼,即可以有多段程式程式碼同時執行,每個程式至少都有一個執行緒,即main方法執行的'那個執行緒。如果只是一個cpu,它怎麼能夠同時執行多段程式呢?這是從巨集觀上來看的,cpu一會執行a線索,一會執行b線索,切換時間很快,給人的感覺是a,b在同時執行,好比大家在同一個辦公室上網,只有一條連結到外部網線,其實,這條網線一會為a傳資料,一會為b傳資料,由於切換時間很短暫,所以,大家感覺都在同時上網。 狀態:就緒,執行,synchronize阻塞,wait和sleep掛起,結束。wait必須在synchronized內部呼叫。

呼叫執行緒的start方法後執行緒進入就緒狀態,執行緒排程系統將就緒狀態的執行緒轉為執行狀態,遇到synchronized語句時,由執行狀態轉為阻塞,當synchronized獲得鎖後,由阻塞轉為執行,在這種情況可以呼叫wait方法轉為掛起狀態,當執行緒關聯的程式碼執行完後,執行緒變為結束狀態。

當一個執行緒進入一個物件的一個synchronized方法後,其它執行緒是否可進入此物件的其它方法? 分幾種情況:1.其他方法前是否加了synchronized關鍵字,如果沒加,則能。2.如果這個方法內部呼叫了wait,則可以進入其他synchronized方法。3.如果其他個方法都加了synchronized關鍵字,並且內部沒有呼叫wait,則不能。4.如果其他方法是static,它用的同步鎖是當前類的位元組碼,與非靜態的方法不能同步,因為非靜態的方法用的是this。

java中多執行緒有幾種實現方法?同步有幾種實現方法?

多執行緒有兩種實現方法,分別是繼承Thread類與實現Runnable介面 同步的實現方面有兩種,分別是synchronized,wait與notify wait():使一個執行緒處於等待狀態,並且釋放所持有的物件的lock。 sleep():使一個正在執行的執行緒處於睡眠狀態,是一個靜態方法,呼叫此方法要捕捉InterruptedException異常。 notify():喚醒一個處於等待狀態的執行緒,注意的是在呼叫此方法的時候,並不能確切的喚醒某一個等待狀態的執行緒,而是由JVM確定喚醒哪個執行緒,而且不是按優先順序。 Allnotity():喚醒所有處入等待狀態的執行緒,注意並不是給所有喚醒執行緒一個物件的鎖,而是讓它們競爭。