线程池原理——生产者/消费者

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;/*** 简化的线程池,仅用来说明工作原理.<br>* @author gongqiang <br>* @version 1.0.0 2021年6月9日<br>* @see * @since JDK 1.5.0*/
public class MyThreadPool {// 利用阻塞队列实现生产者 - 消费者模式private BlockingQueue<Runnable> workQueue;// 保存内部工作线程private List<WorkerThread> threads = new ArrayList<>();// 构造方法public MyThreadPool(int poolSize, BlockingQueue<Runnable> workQueue){this.workQueue = workQueue;// 创建工作线程for(int idx=0; idx<poolSize; idx++){WorkerThread work = new WorkerThread();work.start();threads.add(work);}}// 提交任务void execute(Runnable command){try {workQueue.put(command);} catch (InterruptedException e) {Thread.currentThread().interrupt();}}// 工作线程负责消费任务,并执行任务class WorkerThread extends Thread{public void run() {// 循环取任务并执行while(true){ try {Runnable task = workQueue.take();task.run();} catch (InterruptedException e) {Thread.currentThread().interrupt();}}}}/*** 示例.* @param args*/public static void main(String[] args) {// 创建有界阻塞队列final BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<>(2);// 创建线程池MyThreadPool pool = new MyThreadPool(10, workQueue);// 提交任务pool.execute(()->{System.out.println("hello");});}
}

 

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

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

相关文章

java程序移植_java JDBC 提高程序可移植性

介绍jdbc一般的程序: 【程序编程相关:jboracleweblogic c】很多java初学者在开始接触jdbc编程的时候,在网上与大部分的教材上都是这样 【推荐阅读:Java线程入门——什么是线程】import java.sql.*; 【扩展信息:关于J2ME与C#通过HTTP进行通信时】//可以运行的完整程序public cla…

致开发者:2018年AI技术趋势展望

来源&#xff5c;公众号“AI 前线”&#xff0c;&#xff08;ID&#xff1a;ai-front&#xff09;译者&#xff5c;核子可乐编辑&#xff5c;Emily概要&#xff1a;在 2018 年&#xff0c;开发者如何将一系列 AI 技术成果应用于当前的工作当中呢&#xff1f;近日&#xff0c;一…

svn java注释_svn 强制用户添加注释 和 允许用户修改注释

当我们用TortoiseSVN提交代码时&#xff0c;有很多人不喜欢写注释&#xff0c;导致以后代码版本多&#xff0c;也不清楚哪个版本到底改了什么东西。所以在提交的时候&#xff0c;我会强制要求添加注释。这是如何实现的&#xff1f;这个话题就涉及到了svn的Hooks功能的使用。所谓…

CES2018:英特尔披露量子计算和神经拟态计算研究最新进展

来源&#xff1a;科学网概要&#xff1a;今年上半年&#xff0c;英特尔计划与顶级院校和研究机构共享Loihi测试芯片&#xff0c;同时将其应用于解决更加复杂的数据集和问题。1月8日&#xff0c;在拉斯维加斯举办的2018年国际消费电子产品展&#xff08;CES&#xff09;上&#…

EDA风格与Reactor模式

来源&#xff1a;https://www.cnblogs.com/ivaneye/p/10129896.html 本文将探讨如下几个问题&#xff1a; Event-Driven架构风格的约束EDA风格对架构属性的影响Reactor架构模式Reactor所解决的问题redis中的EventDriven 从观察者模式到EDA风格 GOF的23种设计模式中&#xff…

sha java实现_关于Java实现SHA算法加密 @杨章隐

首先我们在实际开发过程中肯定是需要对明文密码进行加密的&#xff0c;这样&#xff0c;就算密码被获取&#xff0c;他们获取到的也是一串乱码。而目前主流的加密算法有MD5和SHA&#xff0c;这篇文章就带你来实现SHA加密import java.math.BigInteger;import java.security.Mess…

神经尘埃、脑波打字…… 2018年的脑科学要研究什么?

来源&#xff1a;科技日报概要&#xff1a;21世纪是脑科学时代。为了进一步了解大脑&#xff0c;监测大脑活动的研究进行得如火如荼&#xff0c;已在学术界和商业界掀起一股淘金热。人脑可谓人体最复杂、最神秘的器官&#xff0c;无数科学家殚精竭虑&#xff0c;也不过才揭开其…

webapp入门到实战_web前端入门到实战:前端高手在CSS 开发效率的必备片段

这篇文章会记录我们平时常用到的 CSS 片段&#xff0c;使用这些 CSS 可以帮助我们解决许多实际项目问题中遇到的&#xff0c;墙裂建议点赞收藏再看&#xff0c;方便日后查找清除浮动浮动给我们的代码带来的麻烦&#xff0c;想必不需要多说&#xff0c;我们会用很多方式来避免这…

FutureTask 示例

1、简单示例 2、泡茶 1、简单示例 // 创建 FutureTask FutureTask<Integer> futureTask new FutureTask<>(()-> 12); // 创建并启动线程 Thread t1 new Thread(futureTask); t1.start();// 获取计算结果(阻塞主线程&#xff0c;等待结果...) Integer result…

机器学习必知的8大神经网络架构和原理

来源&#xff1a;全球人工智能概要&#xff1a;有些任务直接编码较为复杂&#xff0c;我们不能处理所有的细微之处和简单编码&#xff0c;因此&#xff0c;机器学习很有必要。为什么需要机器学习&#xff1f;有些任务直接编码较为复杂&#xff0c;我们不能处理所有的细微之处和…

《科学》盘点2018可能被聚焦的研究领域

来源&#xff1a;科学网 概要&#xff1a;随着这些大趋势展现出来&#xff0c;《科学》杂志预测了今年可能被聚焦的关于研究和政策的特定领域。动荡的政治变革将在新的一年塑造科学的进程。美国总统唐纳德特朗普领导的政府预计将继续致力于废除基于科学的环境法规。英国离开欧盟…

Hamcrest匹配器常用方法总结

一.Hamcrest是什么&#xff1f; Hamcrest is a library of matchers, which can be combined in to create flexible expressions of intent in tests. Hamcrest 是一个为了测试为目的&#xff0c;且能组合成灵活表达式的匹配器类库。 二.Hamcrest jar包 hamcrest-core.jar -…

谷歌大脑2017总结下篇:从医疗、机器人等6个领域开始的改变世界之旅

作者&#xff1a;camel概要&#xff1a;Jeff Dean发表了这篇博文的下篇&#xff0c;内容包括谷歌大脑在 AI 应用方面&#xff08;诸如医疗、机器人、创新、公平和包容等&#xff09;的工作。昨天谷歌大脑&#xff08;Google Brain&#xff09;负责人 Jeff Dean 在 Google Resea…

敏捷开发原则

1、我们最优先要做的是通过尽早的、持续的交互有价值的软件来使客户满意。 2、即使到了开发的后期&#xff0c;也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势。 3、经常性地交付可以工作的软件&#xff0c;交付的间隔可以几周~几月&#xff0c;交付的时间间隔越短越…

java xml 序列化_java-序列化为XML时忽略父类

当子类列表上有XmlElement时,是否有一个JAXB注释可以忽略父类&#xff1f;只是要澄清一下-我想知道是否有比将所有父类的getter / setter标记为瞬态更好的方法,然后不得不回到子类并添加getter / setter并将它们标注为XmlElements一个例子&#xff1a;public class GenericHelp…

Gartner:人工智能将改变个人设备领域的游戏规则

来源&#xff1a;人工智能和大数据概要&#xff1a;目前&#xff0c;AI正在产生多种颠覆性力量&#xff0c;重塑我们与个人技术互动的方式。近日&#xff0c;Gartner公司预测&#xff0c;随着情感人工智能&#xff08;AI&#xff09;日臻成熟&#xff0c;个人设备到2022年将比您…

极限编程实践

1、客户作为团队成员 谁是客户&#xff1f;XP团队中的客户是指定义产品的特性并排列这些特性优先级的人或团体。 最好是客户和开发人员在一个房间中工作。 2、用户故事 对于做计划而言&#xff0c;了解需求只需要做到能够估算它的程度就足够了&#xff0c;需求的特定细节很可能…

南开大学java考试试题_2014秋学期南开大学《Java语言程序设计》在线作业附答案...

2014秋学期南开大学《Java语言程序设计》在线作业附答案1.下列代码中&#xff0c;将引起一个编译错误的行是(D)。1)public class Test{ 2) int m,n; 3) public Test(){} 4) public Test(inta){ma;} 5) public static void main(String args[]){ 6) Test t1,t2; 7) int j,k;8) j…

张小龙演讲干货:微信的未来在哪?这里有7个答案

来源&#xff1a;钱塘大数据概要&#xff1a;1月15日&#xff0c;以“to be正当时”为主题的2018微信公开课Pro版在广州举行&#xff0c;腾讯集团高级执行副总裁、微信事业群总裁张小龙出席并发表演讲。1月15日&#xff0c;以“to be正当时”为主题的2018微信公开课Pro版在广州…

敏捷软件开发—原则、模式与实践总结

思维导图&#xff1a;https://www.processon.com/view/link/60d46dfb5653bb049a469068