java 线程池技术_Java线程池技术以及实现

public class DefaultThreadPool implements ThreadPool{//线程池最大限制数

private static final int MAX_WORKER_NUMBERS = 10;//线程池默认的数量

private static final int DEFAULT_WORKER_NUMBERS= 5;//线程池最小数量

private static final int MIN_WORKER_NUMBERS = 1;//这是一个任务列表,将会向里面插入任务

private final LinkedList jobs = new LinkedList() ;//工作者列表

private final List workers = Collections.synchronizedList(new ArrayList()) ;//工作者线程的数量

private int workerNum =DEFAULT_WORKER_NUMBERS ;//线程编号生成

private AtomicLong threadNum = newAtomicLong() ;publicDefaultThreadPool(){

initializeWorkers(DEFAULT_WORKER_NUMBERS);

}public DefaultThreadPool(intinitSize){

workerNum= initSize > MAX_WORKER_NUMBERS ?MAX_WORKER_NUMBERS :

initSize< MIN_WORKER_NUMBERS ?MIN_WORKER_NUMBERS : initSize ;

initializeWorkers(workerNum);

}private void initializeWorkers(intnum){for(int i = 0 ; i < num ; i++){

Worker worker= newWorker() ;

workers.add(worker) ;

Thread t= new Thread(worker, "ThreadPool-worker-"+threadNum.incrementAndGet()) ;

t.start();

}

}

@Overridepublic voidexecute(Task task) {if(task!=null){synchronized(jobs){

jobs.addLast(task);//通知

jobs.notify();

}

}

}

@Overridepublic voidshutdown() {for(Worker worker : workers){

worker.shutdown();

}

}

@Overridepublic void addWorker(intnum) {//这里是否应该选择workers为监视器锁

synchronized(workers){//判断新增的数量是否超出线程池的内置规则

if(num+this.workerNum >MAX_WORKER_NUMBERS){

num= MAX_WORKER_NUMBERS - this.workerNum ;

}

initializeWorkers(num);this.workerNum +=num ;

}

}

@Overridepublic void removeWorker(intnum) {synchronized(workers){if(num >= this.workerNum){throw new IllegalArgumentException("beyond workNum") ;

}for(int i = 0 ; i < num ; i++){

Worker worker=workers.get(i);if(workers.remove(worker)){

worker.shutdown();

}

}this.workerNum -=num ;

}

}

@Overridepublic intgetTaskSize() {returnjobs.size();

}class Worker implementsRunnable{private volatile booleanrunning ;

@Overridepublic voidrun() {while(running){

Task job= null;synchronized(jobs){//如果任务列表是空的,那么就wait

if(jobs.isEmpty()){try{

jobs.wait();

}catch(InterruptedException e) {//感知到外部对WorderThread的中断操作。返回

Thread.currentThread().interrupt();return;

}

}

job=jobs.removeFirst() ;

}if(job!=null){try{

job.run();

}catch(Exception e) {//忽略job执行中的exception

}

}

}//while end

}//run end

public voidshutdown(){

running= false;

}

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/358834.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android killer软件闪退的解决办法?

解决办法&#xff1a; 重新下载安装一个版本比较新的。

css3 animation 动画属性简介

animation 动画属性介绍 animation 属性是一个简写属性&#xff0c;用于设置动画属性&#xff1a; 1. animation-name----规定需要绑定到选择器的 keyframe 名称。 语法&#xff1a;animation-name: keyframename|none&#xff1b; Keyframename&#xff1a;规定需要绑定到选择…

EditThisCookie使用

下载安装 http://www.cnplugins.com/uploads/plugins/201502/www.cnplugins.com_fngmhnnpilhplaeedifhccceomclgfbg_1_4_1_.crx从上面这个网址下载下来&#xff0c;下下来之后用Chrome插件伴侣制作成谷歌浏览器能直接添加的插件 使用 鼠标右键单击——>EditThisCookie&am…

ac算法 有什么用 Java_AC算法使用例子

/*** 实现测试&#xff1a;串匹配和词频统计功能*/public void largerTextExample(){String text "你好abc,ac,abc,def,ac,okt, ac,dfdfe, ac , what is it 你好啊,bc";String[] terms {"你好","ac", "abc", "bc"};for (…

eclipse中在类saolei.Test 中找不到main方法

粉丝提问&#xff1a;eclipse中在类saolei.Test 中找不到main方法 解决办法&#xff1a; eclipse设置自动保存或者CTRLS 建议使用更加智能的编译器IDEA

cdi 作用 spring_什么是CDI,它与@EJB和Spring有什么关系?

cdi 作用 spring简要概述了Java EE中的依赖项注入&#xff0c; Resource / EJB和Inject之间的区别以及它们与Spring的关系-主要是链接形式。 上下文依赖注入&#xff08;CDI&#xff0c; JSR 299 &#xff09;是Java EE 6 Web Profile的一部分&#xff0c;它本身基于Java依赖注…

Cookie和会话Session

Cookie和会话Session Cookie Cookie是识别客户端的特定用户。 1.每次HTTP请求的时候&#xff0c;客户端都会发送相应的Cookie信息到服务端。实际上大多数的应用都是用 Cookie 来实现Session跟踪的&#xff0c;第一次创建Session的时候&#xff0c;服务端会在HTTP协议中告诉客…

高速排序算法

高速排序算法作者 July 二零一一年一月四日------------------------------------------写之前&#xff0c;先说点题外话。每写一篇文章&#xff0c;我都会遵循下面几点原则&#xff1a;一、保持版面的尽量清晰&#xff0c;力保排版良好。二、力争所写的东西&#xff0c;清晰易…

java csv 导入数据库_java – 如何上传CSV文件然后自动将数据插入数据库?

我有基于Java的Spring MVC应用程序,它也使用Spring安全性.我正在使用hibernate作为此Web应用程序的ORM工具.以下是我的要求 –用户可以使用Web浏览器上传CSV文件.已知CSV文件的格式包含以下5个字段&#xff1a;userId, location, itemId, quantity, tranDate001, NY, 00A8D5, 2…

某小型校园网规划与设计要点(课程报告)

粉丝求助&#xff1a; 设计某小型校园网络&#xff0c;校园内覆盖4个大楼&#xff0c;分别教学楼&#xff0c;图书馆&#xff0c;办公室和学生宿舍楼&#xff0c;学校申请到B类私有地址为&#xff1a;172.16.8.0/21。要求&#xff1a;&#xff08;1&#xff09;不同大楼主机划分…

使用PHP管理SQL

php管理数据库 php连接数据库函数——mysqli_connect 格式&#xff1a;mysqli_connect(servername,user,pass,database) servername&#xff1a;数据库地址 user&#xff1a;数据库用户名 pass&#xff1a;数据库密码 database&#xff1a;数据库名 <?phpheader(conte…

不可变的基础架构,热部署和JVM

您是否在生产中部署和取消部署基于JVM的应用程序&#xff08;无论JVM容器/无容器&#xff09;&#xff1f; 也就是说&#xff0c;当您拥有某个应用程序或服务的新版本时&#xff0c;是否通过“取消部署”和“热部署”该应用程序的新更新版本来更改正在运行的JVM&#xff1f; 或…

android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )屏幕适配

http://www.tuicool.com/articles/nuyMZb 1 Android手机目前常见的分辨率 1.1 手机常见分辨率: 4:3 VGA 640*480 (Video Graphics Array) QVGA 320*240 (Quarter VGA) HVGA 480*320 (Half-size VGA) SVGA 800*600 (Super VGA) 5:3 WVGA 800*480 (Wide VGA) 16:9 FWVGA …

前端页面通过web3.eth.accounts无法获取账户信息

粉丝求助&#xff1a; /* 新版的方式 */var web3Provider;if (window.ethereum) {web3Provider window.ethereum;try {// 请求用户授权await window.ethereum.enable();} catch (error) {// 用户不授权时console.error("User denied account access")}} else if (wi…

thread java 关闭_怎么在java中关闭一个thread

怎么在java中关闭一个thread我们经常需要在java中用到thread&#xff0c;我们知道thread有一个start()方法可以开启一个线程。那么怎么关闭这个线程呢&#xff1f;有人会说可以用Thread.stop()方法。但是这个方法已经被废弃了。根据Oracle的官方文档&#xff0c;Thread.stop是不…

arp欺骗原理

中间人攻击——ARP欺骗的原理、实战及防御 ​ 1.1 什么是网关 首先来简单解释一下什么是网关&#xff0c;网关工作在OSI七层模型中的传输层或者应用层&#xff0c;用于高层协议的不同网络之间的连接&#xff0c;简单地说&#xff0c;网关就好比是一个房间通向另一个房间的一…

bzoj 3926

后缀自动机扩展到树形结构上。 先建出大的Trie&#xff0c;然后我们得到了一棵Trie树&#xff0c;对于树上的每个节点&#xff0c;保存一个后缀自动机从根走它代表的字符串后到达的节点&#xff0c;每次其儿子就从父亲的这个节点开始扩展。 1 /*******************************…

java memcmp_memcmp,memicmp函数

函数原型&#xff1a;extern int memcmp(void *str1, void *str2, unsigned int n)参数说明&#xff1a;str1和str2为指定作比较的字符串&#xff0c;比较两个字符串的前n个字节。所在库名&#xff1a;#include 函数功能&#xff1a;比较字符串str1和str2在内存区域中的的前n个…

Pycharm社区版安装教程(永久免费,随时升级)

首先进入JetBrain的官网(国内正常访问): https://www.jetbrains.com/ 第一眼看到的界面如下图所示: 然后找到我们的Pycharm专题页: 进入Pycharm的专题页面之后,点击下载按钮(这里有两个按钮,点任何一个都行): 然后进入到真正的下载页面你会发现有两个版本的Pycharm,一个…