2

呼び出し可能なスレッドに優先順位を割り当てる必要があるスレッドタスクに取り組んでいます。

これが私のコードです。

public void processURL(String[] synchronous, String[] asynchronous) {
    ExecutorService es = Executors.newFixedThreadPool(NTHREADS);
    for (int i = 0; i < asynchronous.length; i++) {
        es.execute(new TaskAsyn("Asynchronous Task: " + i, asynchronous[i],
                waiting));
    }

    List<Future<ToStore>> futures = new ArrayList<Future<ToStore>>();
    for (int i = 0; i < synchronous.length; i++) {
        Future<ToStore> future = es.submit(new TaskSynch(
                "synchronous Task: " + i, synchronous[i], waiting));
        futures.add(future);
    }

    for (Future<ToStore> future : futures) {
        try {
            ToStore s = future.get();
            // TODO
            System.out.println("Synchronous Task: " + s.getUrl()
                    + " has finished.");
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }

    System.out.println("here");
}

後で結果を取得するために、呼び出し可能なスレッドで同期が実行されます。実行可能なスレッドで実行される非同期。

非同期の呼び出し可能スレッドも作成できますが、重要ではありません。そのため、ExecuterServiceスレッドに優先順位を付けて割り当てられるようにする方法が私の唯一の問題です。

4

1 に答える 1

3

カスタム スレッド ファクトリを使用して Executor をインスタンス化できます。

public class MyThreadFactory implements ThreadFactory {
   public Thread newThread(Runnable r) {
     Thread t =  new Thread(r);
     t.setPriority(Thread.MAX_PRIORITY); //Or whatever priority
     return t;
   }
 }

ExecutorService es = Executors.newFixedThreadPool(NTHREADS,new MyThreadFactory());
于 2012-08-24T23:51:25.767 に答える