📄 workqueuewithlistener.java
字号:
package thread.workqueue.wqwithListener;
/**
* <p>Title: 一个工作队列的例子</p>
* <p>Description:这个工作队列比较简单。
* <p>提供事件处理机制,可以在工作队列的内部线程进行任务处理时候,回调任务的接口
* <LI>增加了任务开始处理回调接口</LI>
* <LI>增加了任务处理时候回调接口</LI>
* </p>
* <p>提供工作任务优先级别的识别
* <li>工作任务在工作队列内部线程运行时候,区分了任务优先级别,同一个优先级别的任务采用的是先进先出的方式</li>
* </p>
* <p>该工作队列的缺点</p>
* <li>工作任务按照优先级别插入到队列中去</li>
* <li>队列内部线程根据工作任务的优先级别获取高优先级别的任务来运行,这样低优先级别的线程很难被运行,很容易出现饥饿现象</li>
* <li>解决方式:修改工作队列类的工作任务保存方式,不同的优先级别任务进入不同的工作队列列表;把内部工作线程分优先级,
* 然后不用的优先级别任务用不同优先级别的线程处理;但是低优先级别的线程在没有对应级别的任务处理时候,可以去 处理高优先级别的工作任务
*
* </li>
* <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 WorkQueueWithListener {
//private int workThreadCount = 0;
/**
* 保存工作队列的工作任务列表
* **/
private TaskList queue;
/***
* 工作队列的内部线程数组
* **/
private final WorkerThreadWithListener[] threads;
/**
* 控制工作队列是否工作的标志符号
* **/
private boolean stopWork = false;
public WorkQueueWithListener() {
this(10);
}
/**
* 初始化工作队列
* @param iThreads 工作队列的内部线程数量
* **/
public WorkQueueWithListener(int iThreads) {
//workThreadCount = iThreads;
queue = new TaskList();
threads = new WorkerThreadWithListener[iThreads];
for (int i = 0; i < iThreads; i++) {
threads[i] = new WorkerThreadWithListener(queue);
threads[i].start();
}
}
/**
* 放置一个工作到工作队列中去。
* 工作队列的内部线程会从队列中获取任务来进行处理
* @param r 工作任务;可以根据需要修改这个参数的类型,以便于增加一些事件处理机制。
* @return =true表示添加任务成功;=false表示添加任务失败
* **/
public boolean pushWork(WorkerTask r) {
synchronized (queue) {
if (stopWork) {
// throw new Exception("工作队列已经关闭,操作失败!");
return false;
}
else {
queue.addWorkerTask(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) {
WorkQueueWithListener workqueuewithlistener = new WorkQueueWithListener();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -