线程池简单实现java_简单实现java线程池

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

}

}

}

}

}

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

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

相关文章

【转】abp vNext微服务框架分析

abp vNext新框架的热度一直都很高&#xff0c;于是最近上手将vNext的微服务Demo做了一番研究。我的体验是&#xff0c;vNext的微服务架构确实比较成熟&#xff0c;但是十分难以上手&#xff0c;对于没有微服务开发经验的.net人员来说几乎是看不懂的&#xff0c;所以研究一番后再…

java线程的创建与执行_Java多线程的创建和运行

1.多线程的好处多线程是一个很有用的东西&#xff0c;它使的系统可以同时运行多个任务&#xff0c;提高程序的执行效率。大家平时可能没有注意到&#xff0c;其实我们电脑能同时执行多个程序的基本原理就是多线程。每一个程序都是一个进程&#xff0c;而线程则是进程下独立的执…

SQL SERVER data tier application 的作用及如何使用SSDT进行SQL数据库的自动化部署到生产环境和版本控制

这个是管理员用来发布数据库所有的脚本用的&#xff0c;自SQL2008以后&#xff0c;微软开始将数据库的开发整合到VS2010上&#xff0c;用户可以将数据所有的相关对象打包成一个DAC包&#xff0c;让管理通过extract data-tier application发布到服务器上。就好像你把代码变成dll…

bitcount java_Java.math.BigInteger.bitCount()方法实例

全屏Java.math.BigInteger.bitCount()方法实例java.math.BigInteger.bitCount()返回此BigInteger的二进制补码表示的位&#xff0c;从它的符号位不同的数字。实现位向量样式集上BigIntegers的时候&#xff0c;此方法很有用。声明以下是java.math.BigInteger.bitCount()方法的声…

java character是什么意思_Java Character 类

利用Character提取字符串中的大写字母和小写字母&#xff1a;public class UpperLowerCase {/** 利用Character类提取字符串中的大写字母和小写字母* auther Anthony-Z*/public static void main(String[] args) {String sr1 "I Like JAVA ! I learn Java everyday."…

php 和jsp,jsp和php哪个好?jsp和php的简单比较

jsp和php这两个Web开发技术哪个好&#xff1f;这个问题应该会有很多人问&#xff0c;但是每种开发技术都有各自的优缺点&#xff0c;所谓的哪个好&#xff0c;不过是看你更擅长使用哪一种技术&#xff0c;所以今天我们来对比一下jsp和php&#xff0c;介绍jsp和php之间有什么区别…

jQuery Ajax 如何设置Timeout

$.get()与$.post()方法是$.ajax的高级封装 全局属性 $.ajaxSetup({timeout:5000}); $.ajax方法有timeout属性可设置&#xff0c;单位也是毫秒。 Azure App Service MVC下&#xff0c;全局属性才起作用&#xff0c;不知为何

php调用sql数据库代码怎么写,PHP读取SQL文件并导入数据库(示例)

/*** 读取 sql 文件并写入数据库* version 1.01 demo.php* author xingshaocheng* edit: www.jbxue.com*/class DBManager{var $dbHost ;var $dbUser ;var $dbPassword ;var $dbSchema ;function __construct($host,$user,$password,$schema){$this->dbHost $host;$thi…

如何修改SharePoint服务器场管理员帐户和密码

最近需要修改MOSS服务器场的管理员帐户&#xff0c;用 "%commonprogramfiles%\Microsoft Shared\Web server extensions\12\BIN\Stsadm.exe" -o updatefarmcredentials -userlogin [username] -password [password] 这条命令去修改发现没有修改成功&#xff0c;这个…

php中sisson用法,thinkPHP中session()方法用法详解

本文实例讲述了thinkPHP中session()方法用法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;系统提供了Session管理和操作的完善支持&#xff0c;全部操作可以通过一个内置的session函数完成。用法session(name,name,value)参数name(必须)&#xff1a;如果传入数组 则…

【转】SharePoint 2010 Search Service -- 管理中心配置

今天配置了一下SharePoint Search&#xff0c;怕忘&#xff0c;赶紧记下来。 我参考了国外的一篇文章&#xff1a;Search Configuration in SharePoint 2010 首先&#xff0c;要查看以下User Profile Service, User Profile Synchronization Service是否运行正常&#xff0c;然…

PHP获取表单数据的方法有几种,如何实现PHP获取表单数据与HTML嵌入PHP脚本

如何实现PHP获取表单数据与HTML嵌入PHP脚本导语&#xff1a;如何实现PHP获取表单数据与HTML嵌入PHP脚本&#xff0c;下面是小编给大家提供的操作讲解&#xff0c;大家可以参考阅读&#xff0c;更多详情请关注应届毕业生考试网。常用的自动全局变量如下所示&#xff1a;1、GET方…

【转】SharePoint 2013中修改windows 活动目录(AD)域用户密码的WebPart(免费下载)

前段时间工作很忙&#xff0c;好久没更新博客了&#xff0c;趁国庆休假期间&#xff0c;整理了两个之前积累很实用的企业集成组件&#xff0c;并在真正的大型项目中经受住了考验&#xff1a;.Net版SAP RFC适配器组件和SharePoint 2013修改AD域用户密码的WebPart。目前无法在网上…

php base64尺寸,PHP base64编码的图像显示不正确

我试图使用base64编码将图像(任何大小)发送到我创建的API。编码后的字符串会作为URL中的参数访问我的API。使用PHP构建的API。PHP base64编码的图像显示不正确一旦请求命中我的API&#xff0c;我想将图像存储到我的服务器上&#xff0c;并将文件名保存在数据库中。这是工作&…

软件测试之-测试用例写作规范

通用测试用例写作规范 软件测试用例得出软件测试用例的内容&#xff0c;其次&#xff0c;按照软件测试写作方法&#xff0c;落实到文档中&#xff0c;两者是形式和内容的关系&#xff0c;好的测试用例不仅方便自己和别人查看&#xff0c;而且能帮助设计的时候考虑的更周。 一…

php后静态绑定,详解PHP后期静态绑定分析与应用

基础知识1. 范围解析操作符 (::)可以用于访问静态成员&#xff0c;类常量&#xff0c;还可以用于覆盖类中的属性和方法。self&#xff0c;parent 和 static 这三个特殊的关键字是用于在类定义的内部对其属性或方法进行访问的。parent用于调用父类中被覆盖的属性或方法(出现在哪…

Windows电脑SMB共享设置方法

SMB简介&#xff1a; SMB&#xff08;Server Message Block&#xff09;(*nix平台和Win NT4.0又称CIFS)协议是Windows平台标准文件共享协议&#xff0c;Linux平台通过samba来支持。SMB最新版本v3.0&#xff0c;在v2.0基础上针对WAN和分布式有改进。 建议使用原版wind…

php个人扫码支付,PHP个人发卡网源码,支持MA支付对接,扫码自动发货

PHP个人发卡网源码&#xff0c;支持MA支付对接&#xff0c;扫码自动发货。源码介绍个人发卡网源码&#xff0c;支持码支付对接&#xff0c;扫码自动发货.自适应网页&#xff0c;可为商品设置优惠套餐&#xff0c;后台管理功能丰富。前台发卡页面有点粗糙&#xff0c;已开源的可…

NtLmSsp

NTLMSSP (NT LAN Manager Security Support Provider)&#xff0c;是微软提供的安全支持接口协议&#xff0c;常用于SMB共享。估计你是从linux的fstab配置文件看来的选项吧。这个是参数指定了linux挂载smb网络共享时使用的加密方法。 NtLmSsp&#xff08;NT LM安全性支持提供者…

php让代码重新运行一次,脚本运行时是否可以动态重新加载PHP代码?

我有一个使用PHPSockets的多人游戏服务器,因此完全用PHP编写.目前,每当我对PHP服务器脚本进行任何更改时,我都必须终止该脚本,然后重新开始.这意味着任何在线用户都会断开连接(通常不会出现问题,因为目前没有这么多用户).现在我正在重写服务器脚本以使用自定义PHP类并对其进行一…