changeset 5:5be6647b87d2

StartCodeGear implements Runnable to wait InputDataGear
author Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
date Thu, 14 Dec 2017 20:46:18 +0900
parents 605f1b0576c2
children 3dcfe63d6394
files src/main/java/christie/codegear/CodeGear.java src/main/java/christie/codegear/CodeGearManager.java src/main/java/christie/codegear/InputDataGear.java src/main/java/christie/codegear/OutputDataGear.java src/main/java/christie/codegear/StartCodeGear.java src/main/java/christie/datagear/DataGear.java src/main/java/christie/test/StartTest.java
diffstat 7 files changed, 40 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/christie/codegear/CodeGear.java	Wed Dec 13 17:35:25 2017 +0900
+++ b/src/main/java/christie/codegear/CodeGear.java	Thu Dec 14 20:46:18 2017 +0900
@@ -13,8 +13,8 @@
  * Annotationからのinputコマンドの生成、揃ったDataGearの値を返す
  */
 public abstract class CodeGear implements Runnable {
-    public InputDataGear idg = new InputDataGear();
-    public OutputDataGear odg = new OutputDataGear();
+    public InputDataGear idg = new InputDataGear(this);
+    public OutputDataGear odg = new OutputDataGear(this);
     public ArrayList<Command> commandList = new ArrayList<Command>();
     public CodeGearManager cgm;
     public DataGearManager dgm;
@@ -22,7 +22,7 @@
     public CodeGear(CodeGearManager cgm){//AnnotationからInputDataGearをセット
         this.cgm = cgm;
         this.dgm = cgm.getDGM("local");
-        odg.initODG(cgm, this);
+        odg.initODG(cgm);
 
         for (Field field : this.getClass().getDeclaredFields()) {
             if (field.isAnnotationPresent(Take.class)){
@@ -31,7 +31,7 @@
             }
         }
 
-        idg.finishInput(this.cgm, this, commandList);
+        idg.finishInput(this.cgm, commandList);
     }
 
     public void setInputValue(){//Annotationから揃ったInputDataGearの値をキャスト
--- a/src/main/java/christie/codegear/CodeGearManager.java	Wed Dec 13 17:35:25 2017 +0900
+++ b/src/main/java/christie/codegear/CodeGearManager.java	Thu Dec 14 20:46:18 2017 +0900
@@ -25,9 +25,21 @@
     }
 
     public void submit(CodeGear cg){
+        codeGearExecutor.setThreadFactory(makeThreadFactory(Thread.MAX_PRIORITY));
         codeGearExecutor.execute(cg);
     }
 
+    private ThreadFactory makeThreadFactory(final int priority) {
+        return new ThreadFactory() {
+            @Override
+            public Thread newThread(Runnable r) {
+                Thread thread = new Thread(r);
+                thread.setPriority(priority);
+                return thread;
+            }
+        };
+    }
+
     public DataGearManager getDGM(String dest){
         return dataGearManagers.get(dest);
     }
--- a/src/main/java/christie/codegear/InputDataGear.java	Wed Dec 13 17:35:25 2017 +0900
+++ b/src/main/java/christie/codegear/InputDataGear.java	Thu Dec 14 20:46:18 2017 +0900
@@ -15,9 +15,12 @@
     public CodeGear cg;
     private int count = 0;
 
-    void finishInput(CodeGearManager cgm, CodeGear cg, ArrayList<Command> commandList){
+    public InputDataGear(CodeGear cg){
+        this.cg = cg;
+    }
+
+    void finishInput(CodeGearManager cgm, ArrayList<Command> commandList){
         this.cgm = cgm;
-        this.cg = cg;
         count = commandList.size();
 
         if(count == 0){
--- a/src/main/java/christie/codegear/OutputDataGear.java	Wed Dec 13 17:35:25 2017 +0900
+++ b/src/main/java/christie/codegear/OutputDataGear.java	Thu Dec 14 20:46:18 2017 +0900
@@ -9,9 +9,12 @@
     public CodeGearManager cgm;
     public CodeGear cg;
 
-    public void initODG(CodeGearManager cgm, CodeGear cg){
+    public OutputDataGear(CodeGear cg){
+        this.cg = cg;
+    }
+
+    public void initODG(CodeGearManager cgm){
         this.cgm = cgm;
-        this.cg = cg;
     }
 
     public void put(String key, Object data){
--- a/src/main/java/christie/codegear/StartCodeGear.java	Wed Dec 13 17:35:25 2017 +0900
+++ b/src/main/java/christie/codegear/StartCodeGear.java	Thu Dec 14 20:46:18 2017 +0900
@@ -1,28 +1,31 @@
 package christie.codegear;
 
 import java.util.HashMap;
-import java.util.Queue;
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 
-public abstract class StartCodeGear {
+public abstract class StartCodeGear implements Runnable {
     static HashMap<String, CodeGearManager> cgms = new HashMap<String, CodeGearManager>();
     static LinkedBlockingQueue<Runnable> taskQueue = new LinkedBlockingQueue<Runnable>();
-    static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(Runtime.getRuntime().availableProcessors(), // initial number of threads
+    static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(Runtime.getRuntime().availableProcessors(), // initial number of threads
             Runtime.getRuntime().availableProcessors(),
             Integer.MAX_VALUE, // keepAliveTime
             TimeUnit.SECONDS,
             taskQueue);
 
-
     public static CodeGearManager createCGM(String name){
-        CodeGearManager cgm = new CodeGearManager(threadPool);
+        CodeGearManager cgm = new CodeGearManager(threadPoolExecutor);
         cgms.put(name, cgm);
         return cgm;
     }
 
-    public static CodeGearManager getCGM(String name){
+    public CodeGearManager getCGM(String name){
         return cgms.get(name);
     }
+
+    public void execute(){
+        threadPoolExecutor.execute(this);
+    }
+
 }
--- a/src/main/java/christie/datagear/DataGear.java	Wed Dec 13 17:35:25 2017 +0900
+++ b/src/main/java/christie/datagear/DataGear.java	Thu Dec 14 20:46:18 2017 +0900
@@ -1,9 +1,5 @@
 package christie.datagear;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
 public class DataGear<T>{
     T data;
     byte[] byteData;
--- a/src/main/java/christie/test/StartTest.java	Wed Dec 13 17:35:25 2017 +0900
+++ b/src/main/java/christie/test/StartTest.java	Thu Dec 14 20:46:18 2017 +0900
@@ -5,9 +5,13 @@
 public class StartTest extends StartCodeGear{
 
     public static void main(String args[]){
+        new StartTest().execute();
+    }
+
+    @Override
+    public void run() {
         TestCodeGear test = new TestCodeGear(createCGM("first"));
         test.dgm.put("hoge", "hogehogehoge");
         test.dgm.put("huga", 100);
     }
-
 }