最精简的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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Android摄像头开发完美demo---(循环聚焦,缩放大小,旋转picture,查询支持的picturesize, ImageButton按键效果)
下一篇:Android 断点续传下载

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年03月31日 23时55分37秒