package com.ty.thread;

importjava.util.HashSet;importjava.util.Set;importjava.util.concurrent.BlockingQueue;importjava.util.concurrent.LinkedBlockingQueue;/***@authorTaoyong

* @date 2018年5月17日

* 天下没有难敲的代码!*/

public classThreadPoolExecutor {//维护线程的list

private Set threadList = new HashSet();/** 阻塞队列是线程安全的,主要使用在生产/消费者的场景*/

private BlockingQueueblockingQueue;//线程池的工作线程数

private int poolSize = 0;//线程池的核心容量

private int coreSize = 0;private boolean shutDown = false;public ThreadPoolExecutor(intsize) {this.poolSize =size;

blockingQueue= new LinkedBlockingQueue<>(poolSize);

}public void execute(Task task) throwsInterruptedException {if(shutDown == true) {return;

}if(coreSize

blockingQueue.offer(task);

produceWorker(task);

}else{

blockingQueue.put(task);

}

}private void produceWorker(Task task) throwsInterruptedException {if(task == null) {throw new NullPointerException("非法参数:传入的task对象为空!");

}if(shutDown == true) {return;

}

Thread thread= new Thread(newWorker());

threadList.add(thread);

coreSize++;

thread.start();

}public voidshutDown() {if(threadList == null || threadList.size() == 0) {return;

}

shutDown= true;for(Thread thread: threadList) {

System.out.println(thread.getName()+ " interrupt");

thread.interrupt();

}

}/** 此内部类是实际上的工作线 worker是实现了Runnable接口的实际工作线程,通过while(true)循环从BlockingQueue中取任务执行。

**/

class Worker implementsRunnable {

@Overridepublic voidrun() {while(true && shutDown == false) {try{

blockingQueue.take().doJob();

}catch(InterruptedException e) {

e.printStackTrace();

}

}

}

}

}

线程池简单实现java_简单实现java线程池相关推荐

  1. 多线程线程池的实现java_如何在Java中实现线程池

    多线程线程池的实现java 线程是独立程序的执行路径. 在java中,每个线程都扩展java.lang.Thread类或实现java.lang.Runnable. 多线程是指在一个任务中同时执行两个或 ...

  2. 简单的说一说java线程中的死锁和嵌套管程锁死问题?

    为什么80%的码农都做不了架构师?>>>    死锁指的是两个线程都在等待另一个线程释放锁,比如:线程T1获取了锁L1然后在等待获取锁L2,线程T2获取了锁L2然后在等待获取锁L1, ...

  3. java如何关闭线程池_如何优雅的关闭Java线程池

    ⾯试中经常会问到,创建⼀个线程池需要哪些参数.线程池的工作原理,却很少会问到线程池如何安全关闭的. 也正是因为⼤家不是很关注这块,即便是⼯作三四年的⼈,也会有因为线程池关闭不合理,导致应用⽆法正常st ...

  4. java线程池深入讲解_死磕 java线程系列之线程池深入解析——生命周期

    (手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本. 注:线程池源码部分如无特殊说明均指ThreadPoolExecutor类. 简介 上一章我们一起重温了下线程的 ...

  5. java中线程死锁及避免_如何避免Java线程中的死锁?

    java中线程死锁及避免 如何避免Java中的死锁? 是Java面试中最受欢迎的问题之一,也是本季多线程的风格,主要是在高层提出,并带有很多后续问题. 尽管问题看起来很基础,但是一旦您开始深入研究,大 ...

  6. java future 线程 状态_手把手带你了解Java线程的实现方式及生命周期原理

    前言 我们在工作中线程技术很多情况下都能用的到,而且我们在面试的时候,线程技术基本上也是必问的.今天我来从线程的实现方式以及线程的生命周期做一个全面的讲解与分析,帮助大家能更好的去了解线程技术. 概念 ...

  7. java thread 线程销毁_手把手带你了解Java线程的实现方式及生命周期原理

    前言 我们在工作中线程技术很多情况下都能用的到,而且我们在面试的时候,线程技术基本上也是必问的.今天我来从线程的实现方式以及线程的生命周期做一个全面的讲解与分析,帮助大家能更好的去了解线程技术. 概念 ...

  8. thread.sleep是让哪个线程休眠_java多线程必看:java线程的生命周期

    点击蓝字 关注我们 线程是一个动态执行的过程,它也有从创建到死亡的过程.线程的几种状态 在 Thread 类中,有一个枚举内部类: 上面的信息以图片表示如下: 第一张图: 第二张图:把等待.计时等待. ...

  9. java线程说法正确是_下列关于Java线程的说法正确的是

    [单选题]一般出口商品应在出口报关或装运前( )天报检. (5.0分) [单选题]报关单的申报日期是指( ). (5.0分) [简答题]什么是清黄油? [判断题]一份报关单可以填报多个许可证号. (5 ...

  10. java线程没wait前调用notify,深入Java线程 之 wait和notify

    wait和notify 多线程是需要同步协作,比如QuartzSchedulerThread,作为Quartz的任务调度线程,如果设置该线程暂停,那么这个线程就必须wait, 等外界通知继续的时候,再 ...

最新文章

  1. 差分及树上差分学习笔记
  2. [原创]同一页面无法多次使用XmlHttp发起Ajax请求的真实原因
  3. Chrome 浏览器扩展 - Dark Web - Dark Theme for Chrome
  4. vim如何开启256色
  5. Linux能适应不同的指令集,(转)linux常用指令集
  6. django ipython shell_通過django的shell_plus編寫ipython腳本
  7. 使用WITH AS提高性能简化嵌套SQL
  8. 深入探索C++对象模型(2)
  9. 学计算机买笔记本还是平板,学生买平板还是笔记本电脑好
  10. 思科 终端服务器的配置
  11. 使用ORC识别图片的文字
  12. Java给pdf添加页码(这是我之前的一篇文章)出现内存溢出Java heap space
  13. 数学建模三剑客MSN | CSDN博文精选
  14. #编写一个函数,实现接受一个字符串,分别统计大写字母、小写字母、数字、其他字符的个数,并且返回结果
  15. 沐风:小程序固然好!凭什么能自动赚钱?
  16. 如何获取ffmpeg返回的错误信息
  17. WorldView卫星家族简介
  18. Robust stochastic frontier analysis
  19. 【Java基础系列】tob和toc的区别
  20. Linux忘记密码(登陆和root)

热门文章

  1. 实用MYSQL语句收集
  2. PID是什么?在做系统的故障排除时如何使用它?
  3. PAT-Mars number
  4. xman的思维导图快捷键_一图胜千言,免费的多人协作思维导图工具,推荐收藏值得拥有哦...
  5. 删除苹果自带软件后果_苹果IOS备忘录便签软件敬业签恢复删除内容应该怎么操作?...
  6. java 异步socket_java Socket读写异步分离
  7. 找到一个二位数组的鞍点
  8. mbsfn子帧_区分小区内子帧状态的方法、装置以及系统_2008100004878_说明书_专利查询_专利网_钻瓜专利网...
  9. mysql savepoint语法_SAVEPOINT语法错误一例
  10. mysql主从进行扩展_Mysql主从知识扩展部分1