当前位置: 首页 > news >正文

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

相关文章:

  • 期待变化
  • 与IT行业相关从事企业现状
  • 让自己的职业生涯走在正确的道路上,读《程序员职场第一课》有感
  • ExtJS与JQuery的对比
  • Spring轻量吗?轻量个屁
  • 最近在做一个基于SaaS架构的B2B2C项目
  • LGame框架问题汇总,有疑问请发至此文
  • Flex、JQuery、ExtJS 的选择
  • 国内以项目为主的软件公司核心问题
  • 高龄程序员 求职之惑,读LEO程序员求职第一书有感
  • 软件架构经验总结
  • 创建自己的业务流程管理框架
  • 创业有感
  • 《爬梯子的故事》
  • 小故事:金钱的是是非非
  • [PHP内核探索]PHP中的哈希表
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 78. Subsets
  • Android开源项目规范总结
  • const let
  • ES6语法详解(一)
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • laravel5.5 视图共享数据
  • node入门
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • 解决iview多表头动态更改列元素发生的错误
  • 三栏布局总结
  • 使用common-codec进行md5加密
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 延迟脚本的方式
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 06-01 点餐小程序前台界面搭建
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #define、const、typedef的差别
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (23)Linux的软硬连接
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (NSDate) 时间 (time )比较
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (超详细)语音信号处理之特征提取
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (一)Linux+Windows下安装ffmpeg
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)ObjectiveC 深浅拷贝学习
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅