# HG changeset patch # User kazz # Date 1326621721 -32400 # Node ID 145667a554ada0f0d3a7816af28eccaa0ec68875 # Parent 0bb03861b5cd3cbc76431bffb7a96757c72ab859 run CodeSegment with ThreadPoolExecutor diff -r 0bb03861b5cd -r 145667a554ad src/alice/codesegment/CodeSegment.java --- a/src/alice/codesegment/CodeSegment.java Sun Jan 15 18:44:25 2012 +0900 +++ b/src/alice/codesegment/CodeSegment.java Sun Jan 15 19:02:01 2012 +0900 @@ -2,7 +2,7 @@ import alice.codesegment.InputDataSegment; -public abstract class CodeSegment { +public abstract class CodeSegment implements Runnable { public InputDataSegment ids = new InputDataSegment(this); public OutputDataSegment ods = new OutputDataSegment(); @@ -10,7 +10,5 @@ public void execute() { ids.receive(); } - - public abstract void run(); } diff -r 0bb03861b5cd -r 145667a554ad src/alice/codesegment/CodeSegmentManager.java --- a/src/alice/codesegment/CodeSegmentManager.java Sun Jan 15 18:44:25 2012 +0900 +++ b/src/alice/codesegment/CodeSegmentManager.java Sun Jan 15 19:02:01 2012 +0900 @@ -1,10 +1,17 @@ package alice.codesegment; import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; public class CodeSegmentManager { private static CodeSegmentManager instance = new CodeSegmentManager(); public LinkedBlockingQueue readyQueue = new LinkedBlockingQueue(); + ThreadPoolExecutor codeSegmentExecutor = new ThreadPoolExecutor(1, + Runtime.getRuntime().availableProcessors(), + Integer.MAX_VALUE, + TimeUnit.SECONDS, + new LinkedBlockingQueue()); private CodeSegmentManager() { Runnable prepareThread = new Runnable() { @@ -14,7 +21,7 @@ while (true) { try { CodeSegment cs = readyQueue.take(); - cs.run(); + codeSegmentExecutor.execute(cs); } catch (InterruptedException e) { e.printStackTrace(); }