2012-02-26 5 views
0

내 프로그램에서 새 값이 트리거 될 때마다 많은 수의 수신기를 업데이트하는 클래스를 작성했습니다. 그 때문에 나는 SingleThreadExecutor을 사용하고 있는데, 예제가 더 명확해야합니다. 나는 약 걱정하고 무엇을, 나는 그런 식으로 실행할 때 이해하지 :ExecutorService를 사용하는 가장 효과적인 방법

Class Update() { 
    ExecutorService svc = Executors.newSingleThreadExecutor(); 

    svc.execute(new Runnable() { 
     public void run() { 
      if(!theListeners.isEmpty()) { 
       for(IgpsdListener l : theListeners) { 
        l.update(jsonObject); 
       } 
      } 
     } 
    }); 

내가 들어, 스레드를 생성하는 자바에서 매우 비싼 작업이다, 그래서 제대로 사용하고 있는지 궁금하고있다. 내 말은, 때마다 새로운 Runnable 개체를 만듭니다? Executor조차도 유일한 스레드만을 사용합니다.

도움과 계발에 대해 미리 감사드립니다. nyyrikki

+1

내가 외부에하면 실행'경우 (! theListeners.isEmpty())'이동합니다 :

class Update() { private final List<IgpsdListener> theListeners = //... private ExecutorService svc = Executors.newSingleThreadExecutor(); svc.execute(new Runnable() { public void run() { if(!theListeners.isEmpty()) { for(IgpsdListener l : theListeners) { l.update(); } } } }); 

이이 단순화 될 수있다(). 아무 것도하지 않는 작업을 추가 할 필요가 없습니다. 나는 당신이 당신의 집행자를 재사용하고 각 작업마다 하나도 만들지 않는다고 가정합니다. –

+1

실행 프로그램은 한 번만 작성되며 올바른 것입니다. 당신이 말한 것은 완전히 이해가됩니다. 만약'if()'를'execute()'밖에서 움직이면 이벤트는 리스너가 이벤트에 등록하지 않은 경우에도 실행되지 않을 것입니다. 못 봤어, 고마워. 고마워! – nyyrikki

답변

1

이것은 정확하게 수행 중이라고 가정합니다. 자바는 이와 같이 단발 객체를 만드는 것이 매우 빠릅니다. 쓰레드는 비싸지 만, 여기에있는 것처럼 Runnable을 생성하는 것은 값이 쌉니다.

+0

실행 파일이 저렴하며 실행 파일이 아닙니다. –

1

성능면에서 코드는 괜찮습니다. jsonObject의 출처가 무엇인지 설명하지 않지만 Runnable이 상태 비 저장 인 경우 하나의 인스턴스 만 만들 수도 있습니다 (대소 문자는 아니지만 알아둬야 할 가치가 있음). 예를 들어

이 전체 코드 인 경우

class Update() { 

    private final List<IgpsdListener> theListeners = //... 

    private ExecutorService svc = Executors.newSingleThreadExecutor(); 

    final Notifier notifier = new Notifier() 

    //execute this as many times as you want with the same notififer instance 
    svc.execute(notififer); 

    class Notifier implements Runnable { 
      public void run() { 
       if(!theListeners.isEmpty()) { 
        for(IgpsdListener l : theListeners) { 
         l.update(); 
        } 
       } 
      } 
    } 
관련 문제