加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

Java线程池实现原理与技术,看这一篇就够了

发布时间:2019-04-01 15:09:41 所属栏目:建站 来源:程序员柯南
导读:01.无限制线程的缺点 多线程的软件设计方法确实可以最大限度地发挥多核处理器的计算能力,提高生产系统的吞吐量和性能。但是,若不加控制和管理的随意使用线程,对系统的性能反而会产生不利的影响。 一种最为简单的线程创建和回收的方法类似如下: newThre

2.要实现上面的线程池,就需要一个永不退出的线程与之配合。PThread就是一个这样的线程。它的主体部分是一个无限循环,该线程在手动关闭前永不结束,并一直等待新的任务到达。

  1. public class PThread extends Thread { 
  2.     //线程池 
  3.     private ThreadPool pool; 
  4.     //任务 
  5.     private Runnable target; 
  6.     private boolean isShutDown = false; 
  7.     private boolean isIdle = false; //是否闲置 
  8.     //构造函数 
  9.     public PThread(Runnable target,String name, ThreadPool pool){ 
  10.         super(name); 
  11.         this.pool = pool; 
  12.         this.target = target; 
  13.     } 
  14.  
  15.     public Runnable getTarget(){ 
  16.         return target; 
  17.     } 
  18.  
  19.     public boolean isIdle() { 
  20.         return isIdle; 
  21.     } 
  22.  
  23.     @Override 
  24.     public void run() { 
  25.         //只要没有关闭,则一直不结束该线程 
  26.         while (!isShutDown){ 
  27.             isIdle =  false; 
  28.             if (target != null){ 
  29.                 //运行任务 
  30.                 target.run(); 
  31.             } 
  32.             try { 
  33.                 //任务结束了,到闲置状态 
  34.                 isIdle = true; 
  35.                 pool.repool(this); 
  36.                 synchronized (this){ 
  37.                     //线程空闲,等待新的任务到来 
  38.                     wait(); 
  39.                 } 
  40.             } catch (InterruptedException e) { 
  41.                 e.printStackTrace(); 
  42.             } 
  43.             isIdle = false; 
  44.         } 
  45.     } 
  46.  
  47.     public synchronized void setTarget(Runnable newTarget){ 
  48.         target = newTarget; 
  49.         //设置了任务之后,通知run方法,开始执行这个任务 
  50.         notifyAll(); 
  51.     } 
  52.  
  53.     //关闭线程 
  54.     public synchronized void shutDown(){ 
  55.         isShutDown = true; 
  56.         notifyAll(); 
  57.     } 
  58.  

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读