(java)关于Thread的挂起和恢复

来源:互联网 发布:redis publish php 编辑:程序博客网 时间:2024/06/05 22:05

今天在做 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");
    }
}

原创粉丝点击