最精简的java 线程池与任务队列
发布日期:2021-07-19 12:29:49
浏览次数:8
分类:技术文章
本文共 1391 字,大约阅读时间需要 4 分钟。
import java.util.*;public class WorkQueue { private final int nThreads;// 线程池的大小 private final PoolWorker[] threads;// 用数组实现线程池 private final LinkedList queue;// 任务队列 public WorkQueue(int nThreads) { this.nThreads = nThreads; queue = new LinkedList(); threads = new PoolWorker[nThreads]; for (int i = 0; i < nThreads; i++) { threads[i] = new PoolWorker(); threads[i].start();// 启动所有工作线程 } } public void execute(Runnable r) {// 执行任务 synchronized (queue) { queue.addLast(r); queue.notify(); } } private class PoolWorker extends Thread {// 工作线程类 public void run() { Runnable r; while (true) { synchronized (queue) { while (queue.isEmpty()) {// 如果任务队列中没有任务,等待 try { queue.wait(); } catch (InterruptedException ignored) { } } r = (Runnable) queue.removeFirst();// 有任务时,取出任务 } try { r.run();// 执行任务 } catch (RuntimeException e) { // You might want to log something here } } } } public static void main(String args[]) { WorkQueue wq = new WorkQueue(10);// 10个工作线程 Mytask r[] = new Mytask[20];// 20个任务 for (int i = 0; i < 20; i++) { r[i] = new Mytask(); wq.execute(r[i]); } }}class Mytask implements Runnable {// 任务接口 public void run() { String name = Thread.currentThread().getName(); try { Thread.sleep(100);// 模拟任务执行的时间 } catch (InterruptedException e) { } System.out.println(name + " executed OK"); }}
转载地址:https://blog.csdn.net/jdsjlzx/article/details/9095785 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2024年03月31日 23时55分37秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
自定义View实现圆环环绕的加载动画
2019-04-26
Android 自定义View利用Path实现变速圆周运动的环绕加载动画
2019-04-26
Android 自定义View一个酷炫又无厘头的动画
2019-04-26
Android 自定义LinearLayout实现滑动下拉抽屉的功能
2019-04-26
Android 自定义LinearLayout实现滑动下拉抽屉的功能(解决滑动冲突)
2019-04-26
Flutter 检查权限与添加权限
2019-04-26
Flutter 圆形Image
2019-04-26
Flutter 十六进制与字符串的相互转换
2019-04-26
Android 短信sms倒计时
2019-04-26
关于ue4播放(play)后画质不清晰的问题
2019-04-26
1095 解码PAT准考证(25 分) 关于测试点的问题
2019-04-26
pr cc版拖动时间线时音频轨道发出声音的解决方法
2019-04-26
spring-session+redis,实现session共享
2019-04-26
批量删除.svn文件
2019-04-26
超实用网站地址
2019-04-26
linux下卸载安装jdk
2019-04-26
mysql设置不区分大小写
2019-04-26
linux下安装redis
2019-04-26
linux安装nginx(centos/Ubuntu/debian)
2019-04-26