(java)關於Thread的掛起和恢復
阿新 • • 發佈:2019-02-19
今天在做 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");
}
}