📄 workqueue.java
字号:
package com.kelefa.cmpp.work;
import java.util.LinkedList;
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.notifyAll();
}
}
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();
}
// If we don't catch RuntimeException,
// the pool could leak threads
try {
r.run();
}
catch ( RuntimeException e ) {
// You might want to log something here
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -