我有工作接口IJob這樣的:在Java中運行多個線程,錯誤管理
public interface IJob {
public void execute();
}
在我的應用程序有多個類實現了這個接口,像IJob1和IJob2:
public class IJob1 implements IJob{
@Override
public void execute(){
System.out.println("IJob1\n");
}
}
public class IJob2 implements IJob{
@Override
public void execute(){
System.out.println("IJob2\n");
}
}
因爲要運行的作業量穩步增加,所以我想創建一個新的作業,它將IJob實例列表並行運行。新實現用於並行運行作業的線程數量應該是可配置的。如果其中一個作業引發異常,則其他所有當前正在運行的作業也應該停止,並且execute()方法應將異常傳遞給調用者。
我寫了這個,但我不能夠運行作業和檢查,如果有一個錯誤:
import java.util.LinkedList;
public class WorkQueue
{
private final int nThreads;
private final IJob[] threads;
private final LinkedList queue;
public WorkQueue(int nThreads)
{
this.nThreads = nThreads;
queue = new LinkedList();
threads = new IJob[nThreads];
for (int i=0; i<nThreads; i++) {
threads[i] = new IJob();
threads[i].execute();
}
}
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();
}
// If we don't catch RuntimeException,
// the pool could leak threads
try {
r.run();
}
catch (RuntimeException e) {
// You might want to log something here
}
}
}
}
}
能否請您給我一些幫助很少去? 非常感謝。
看看'ThreadPoolExecutor'。你的工作將是這方面的任務。 – Thomas
它們不是線程,所以它們按順序執行......創建一個需要擴展'Thread'類的線程 – Marcx
感謝您的幫助。我會去看看這個背景 – sharkbait