2015-01-13 5 views
0

메인 클래스에 다른 실행 가능한 클래스에 대한 스레드 실행 프로그램을 설정하는 응용 프로그램이 있지만 기본 클래스의 업데이트 메소드를 정기적으로 호출하여 원하는대로 만들 수 있습니다. 아래 예와 같은 쓰레드 또는 그 안에 선언 된 쓰레드 실행자에게 클래스를 제출하십시오 (예제 아래의 예와 같습니다)?Java Thread Executor 기본 클래스 제출

스레드 실행기와 시작 표준 스레드의 혼합을 사용하면 문제가 발생합니다.

메인 클래스 업데이트에 표준 스레드 호출을 사용 하시겠습니까?

공용 클래스 테스트 {

private ScheduledExecutorService scheduledThreadPool; //used for creating other threads 
private Thread t; 

public Test() { 
    t = new Thread() { 
     @Override 
     public void run() { 
      try { 
       while (true) { 
        processUpdates(); 
        Thread.sleep(10); 
       } 
      } catch (InterruptedException e) { 
       logger.error(e); 
      } 
     } 
    }; 
} 

private void processUpdates() { 
    //do some stuff 
} 

}

하거나 다른 실행 가능한 클래스 있지만, 메인 클래스 자체를하지 않는 스레드 집행을 사용할 수 있습니까?

공용 클래스 테스트는 실행 가능한 {

ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(3); 

public Test() { 
    scheduledThreadPool.scheduleWithFixedDelay(this, 0, 10, TimeUnit.MILLISECONDS); 
} 

@ Override 
public void run() { 
    processUpdates(); 
} 

private void processUpdates() { 
    //do some stuff 
} 

}

감사 구현!

답변

0

평범한 이전 스레드 인에 대해 항상 스레드 풀을 사용하면 스레드 실행을 훨씬 제어 할 수 있습니다.

모든 스레드를 병렬로 실행하려면 무제한 스레드 풀을 항상 사용할 수 있습니다. 이는 Thread이 메모리 비용이 많이 들기 때문에 권장하지 않습니다.

스레드 구현시 sleep 명령어를 사용하지 않으므로 ScheduledExecutorService을 사용하는 것이 좋습니다. 그것은 더 나은 성능과 훨씬 더 가독성을 제공합니다.

+0

그래서 메인 클래스를 쓰레드 풀에 제출하는 것은 괜찮습니다. – user3469157

+0

예 @ user3469157, 이것이 좋습니다. 질문이 있으면 스레드를 내부 클래스로 옮기거나'main()'메서드를 사용하여 클래스에서 멀리 떨어진 외부 클래스로 꺼내야합니다. – Gray