今天在做 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");
}
}
(java)关于Thread的挂起和恢复
最新推荐文章于 2024-09-18 22:14:01 发布