java 中有幾種方法可以實現一個線程? 用什么關鍵字修 飾同步方法? stop()和 suspend()方法為何不推薦使用?


java5 以前, 有如下兩種:
第一種:
new Thread(){}.start();這表示調用 Thread 子類對象的 run 方法, new Thread(){}表示一個Thread 的匿名子類的實例對象, 子類加上 run 方法后的代碼如下:

1 new Thread(){
2       public void run(){
3     } 
4 }.start();

 



第二種:
new Thread(new Runnable(){}).start();這表示調用 Thread 對象接受的 Runnable 對象的 run方法, new Runnable(){}表示一個 Runnable 的匿名子類的實例對象,runnable 的子類加上 run 方法后的代碼如下:

1 new Thread(new Runnable(){
2         public void run(){
3         } 
4     }
5  ).start();         

java5 開始, 還有如下一些線程池創建多線程的方式:

 1 ExecutorService pool = Executors.newFixedThreadPool(3)
 2 for(int i=0;i<10;i++){
 3     pool.execute(new Runable(){
 4         public void run(){
 5         }
 6     });
 7 }
 8 Executors.newCachedThreadPool().execute(new Runable(){
 9     public void run(){
10     }
11 });
12 Executors.newSingleThreadExecutor().execute(new Runable(
13     {public void run(){
14     }
15 });             

 有兩種實現方法, 分別使用 new Thread()new Thread(runnable)形式, 第一種直接調用
thread run 方法, 所以, 我們往往使用 Thread 子類, 即 new SubThread()。 第二種調
runnable run 方法。
有兩種實現方法, 分別是繼承 Thread 類與實現 Runnable 接口
synchronized 關鍵字修飾同步方法
反對使用 stop(), 是因為它不安全。 它會解除由線程獲取的所有鎖定, 而且如果對象處
於一種不連貫狀態, 那么其他線程能在那種狀態下檢查和修改它們。 結果很難檢查出
真正的問題所在。 suspend()方法容易發生死鎖。 調用 suspend()的時候, 目標線程會停
下來, 但卻仍然持有在這之前獲得的鎖定。 此時, 其他任何線程都不能訪問鎖定的資
源, 除非被"掛起"的線程恢復運行。 對任何線程來說, 如果它們想恢復目標線程, 同
時又試圖使用任何一個鎖定的資源, 就會造成死鎖。 所以不應該使用 suspend(), 而應
在自己的 Thread 類中置入一個標志, 指出線程應該活動還是掛起。 若標志指出線程應
該掛起, 便用 wait()命其進入等待狀態。 若標志指出線程應當恢復, 則用一個 notify()
重新啟動線程

 





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM