📄 workqueue.java
字号:
package thread.workqueue;
import java.util.LinkedList;
/**
* <p>Title: 一个简单的工作队列的例子</p>
* <p>Description:这个工作队列比较简单。
* <p>没有提供事件处理机制,可以考虑在工作队列的内部线程进行任务处理时候,回调任务的接口
* <LI>应该增加任务开始处理回调接口</LI>
* <LI>应该增加任务处理时候回调接口</LI>
* </p>
* <p>没有提供工作任务优先级别的识别
* <li>工作任务在工作队列内部线程运行时候,采用的是先进先出的方式,没有区分任务的优先级别</li>
* </p>
* <p>Copyright: Copyright (c) 2004</p>
*
* <p>Company: netsky</p>
*
* @author wdz123@hotmail.com
* @version 1.0
* @see thread.workqueue.WorkerThread
* @see Java 理论与实践:线程池与工作队列 线程池有助于实现最佳资源利用率
* {@link http://www-900.ibm.com/developerWorks/cn/java/j-jtp0730/index.shtml}
*
*/
public class WorkQueue {
//private int workThreadCount = 0;
/**
* 保存工作队列的工作任务列表
* **/
private LinkedList queue;
/***
* 工作队列的内部线程数组
* **/
private final WorkerThread[] threads;
/**
* 控制工作队列是否工作的标志符号
* **/
private boolean stopWork = false;
public WorkQueue() {
this(10);
}
/**
* 初始化工作队列
* @param iThreads 工作队列的内部线程数量
* **/
public WorkQueue(int iThreads) {
//workThreadCount = iThreads;
queue = new LinkedList();
threads = new WorkerThread[iThreads];
for (int i = 0; i < iThreads; i++) {
threads[i] = new WorkerThread(queue);
threads[i].start();
}
}
/**
* 放置一个工作到工作队列中去。
* 工作队列的内部线程会从队列中获取任务来进行处理
* @param r 工作任务;可以根据需要修改这个参数的类型,以便于增加一些事件处理机制。
* @return =true表示添加任务成功;=false表示添加任务失败
* **/
public boolean pushWork(Runnable r) {
synchronized (queue) {
if (stopWork) {
// throw new Exception("工作队列已经关闭,操作失败!");
return false;
}
else {
queue.addLast(r);
queue.notify();
return true;
}
}
}
/**
*关闭队列--
* 通知工作队列内部各个线程,停止处理新的任务。
* 但是正在处理的任务还是会继续处理。
* **/
public void closeQueue() {
synchronized (queue) {
stopWork = true;
for (int i = 0; i < threads.length; i++) {
threads[i].stopProcess();
}
queue.clear();
}
}
public static void main(String[] args) {
WorkQueue workqueue = new WorkQueue();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -