2012-08-24 3 views
3

호출 가능 스레드의 우선 순위를 지정해야하는 스레드 태스크에서 작업 중입니다.호출 가능 유형 스레드의 우선 순위 할당

여기 내 코드입니다.

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 스레드를 우선 순위로 할당하는 방법은 내 유일한 문제입니다.

답변

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());