1. 程式人生 > >(java)關於Thread的掛起和恢復

(java)關於Thread的掛起和恢復

今天在做 Thread的測試,主要目的就是了解下執行緒的掛起和恢復。
   
         差了很多資料,一直用的是wait()和notify()函式,結果總是出錯,後來又找了些東西看,發現java已經取消的兩個函式
        resume();     //恢復執行緒
        suspend();   //掛起執行緒
        java之所以取消這兩個函式,是因為容易照成死鎖,但是對於很多專案來說,掛起一個程序後,可以節約cpu的資源,是
一種很好的執行緒執行方法。
    
        下面的程式碼演示的就是一個對佇列進行監控的執行緒,當有向佇列插入的請求時候,執行緒恢復執行操作,當佇列為空時,掛起執行緒節約cpu資源。
       可以利用的情況:在web 設計中,經常會遇到後臺的監控處理,可以用下面的監控程式進行監控,有資訊來則把處理該資訊的執行緒恢復,如果沒有資訊請求,則掛起,減輕伺服器負擔。

原始碼如下:



import java.util.*;
public class JudgeThread extends Thread
{
    private  String str;
    private  Queue<String> queue = new LinkedList<String>();
    public void Insert(String str)                             //向佇列插入時候進行執行緒恢復,達到監控效果.
    {       
         queue.offer(str);
         this.resume();
    }
    public void run()
    {
        try{
              while(true)
              {
                 while((str = queue.poll())!=null)
                 {
                       System.out.println(str);    //也可以進行其他操作!
                 }
                 //佇列為空,這裡進行掛起執行緒操作
                 System.out.println("掛起");
                 this.suspend();
                
              }   
        }catch(Exception e)   
        {         
            System.out.println("JudgeThread Error");     
        }  
    }
     public static void main(String args[]) throws Exception
    {
        JudgeThread jt = new JudgeThread();
        jt.start();
        jt.Insert("hello");
        Thread.sleep(2000);
        for(int i = 0;i<10;i++)
            jt.Insert("world");
        Thread.sleep(4000);
        for(int i = 0;i<5;i++)
              jt.Insert("hello2");
        Thread.sleep(5000);
        jt.Insert("world2");
    }
}