`
444878909
  • 浏览: 642249 次
文章分类
社区版块
存档分类
最新评论

(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");
}
}

分享到:
评论

相关推荐

    理解多线程,写一个多线程应用程序,要求能在用户级实现线程的调度,如启动、挂起、恢复、停止,的C thread、java thread实现。

    理解多线程,写一个多线程应用程序,要求能在用户级实现线程的调度,如启动、挂起、恢复、停止,的C thread、java thread实现。

    Java多线程机制(讲述java里面与多线程有关的函数)

    Java多线程机制 9.1 Java中的线程 9.2 Thread的子类创建线程 9.3 使用Runable接口 9.4 线程的常用方法 9.5 GUI线程 ...9.8 挂起、恢复和终止线程 9.9 计时器线程Timer 9.10 线程联合 9.11 守护线程

    java面试题(线程和JSP及EJB部分).pdf

    所以不应该使用suspend(),而应在自己的Thread 类中置入一个标志,指出线程应该活动还是挂起。若标志指出 线程应该挂起,便用wait()命其进入等待状态。若标志指出线程应当恢复,则用一个notify()重新启动线程。

    Java2实用教程.rar

    9 8挂起 恢复和终止线程 9 9计时器线程Timer 9 10线程联合 9 11守护线程 习题 第10章输入输出流 10 1File类 10 2FileInputStream类 10 3FileOutputStream类 10 4FileReader类和FileWriter类 10 5使用文件对话框打开...

    java程序设计实验指导代码

    13.5 实验4 wait( )和notify( )挂起与恢复线程 第14章 文件和流 14.1 预备知识 14.2 实验1 文本浏览器 14.3 实验2 文本编辑器 14.4 实验3 成绩排队 14.5 实验4 用RandomAccessFile实现名片记录本 14.6 实验5 Zip的...

    java笔试题大集合及答案(另附各大公司笔试题)

    此时,其他任何线程都不能访问锁定的资源,除非被"挂起"的线程恢复运行。对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何一个锁定的资源,就会造成死锁。所以不应该使用suspend(),而应在自己的Thread...

    java多线程实验

    java设计两个线程,一个线程充当电子表,每隔一秒在窗口上显示一下...另一个线程充当闹钟,每到整点就开始报时,即在窗口显示5次整点提示,同时将第一个线程挂起,报时完毕后再将第一个线程恢复。实验结果如图1-1所示:

    java 面试题 总结

    JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变...

    java应用程序中使用线程

    锁定排序 3.6 线程优先级 3.7 监控程序线程 3.8 在应用程序中加入线程 3.9 线程控制 3.9.1 线程启动 3.9.2 线程休眠 3.9.3 线程挂起 3.9.4 线程恢复 3.9.5 线程停止 3.9.6...

    java课程设计报告-五子棋.doc

    Public class 类名 extends Applet{ Public void init(){//初始化变量、设置字体、装载图片} Public void start(){//启动程序执行或恢复程序执行} Public void stop(){//挂起正在执行的程序,暂停程序} Public viod...

    java课程设计报告-五子棋(1).doc

    Public class 类名 extends Applet{ Public void init(){//初始化变量、设置字体、装载图片} Public void start(){//启动程序执行或恢复程序执行} Public void stop(){//挂起正在执行的程序,暂停程序} Public viod...

    java课程设计报告-五子棋(2).doc

    Public class 类名 extends Applet{ Public void init(){//初始化变量、设置字体、装载图片} Public void start(){//启动程序执行或恢复程序执行} Public void stop(){//挂起正在执行的程序,暂停程序} Public viod...

    超级有影响力霸气的Java面试题大全文档

    sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。 wait是Object类的方法,对此对象调用wait方法导致本线程...

    多线程,高并发.zip

    类中置入一个标志,指出线程应该活动还是挂起。若标志指出线程应该挂起,便用 wait() 命其进入等待状态。若标志指出线程应当恢复,则用一个 notify() 重新启动线程。 2. sleep() 和 wait() 有什么区别?

Global site tag (gtag.js) - Google Analytics