코드를 병렬로 실행하는 태스크 개발

Callable 또는 Runnable로 코드 줄을 바꾼 다음 관리 실행자로 제출 또는 스케줄하여 병렬로 조작을 수행할 수 있습니다.

시작하기 전에

선택적으로, 관리자는 콘솔을 사용하여 하나 이상의 작업 관리자를 구성할 수 있거나 관리 기본 작업 관리자의 설정을 변경할 수 있습니다.

이 태스크 정보

병렬로 코드를 실행하면 Callable 또는 Runnable로 코드 줄을 바꾸고 관리 실행자로 제출 또는 스케줄해야 합니다.

프로시저

  1. Callable 또는 Runnable 태스크를 구현하십시오.

    태스크는 java.util.concurrent.Callable 인터페이스 또는 java.lang.Runnable 인터페이스를 구현합니다. 예를 들어, 주제 및 모든 컴포넌트에 동적으로 등록하는 태스크를 작성할 수 있습니다.

    class SampleTask implements Callable<Object>
    {
       Set<MessageListener> listeners =      
          Collections.newSetFromMap(new ConcurrentHashMap<MessageListener, Boolean>();
       Topic targetTopic;
       TopicConnectionFactory tcf;
    
       public SampleWork(TopicConnectionFactory tcf, Topic targetTopic)
       {
          this.targetTopic = targetTopic;
          this.tcf = tcf;
       }
    
       public void addMessageListener(MessageListener listener) 
       {
          listeners.add(listener);
       }
    
       public Object call() throws JMSException
       {
          // setup our JMS stuff.TopicConnection
          tc = tcf.createConnection();
          try 
          {
             TopicSession sess = tc.createSession(false, Session.AUTOACK);
             tc.start();
             while( !Thread.currentThread().isInterrupted() )
             {
                // block for up to 5 seconds.
                Message msg = sess.receiveMessage(5000);
                if(msg != null)
                   for (MessageListener listener : listeners)
                      listener.onMessage(msg);
             }
             tc.close();
          }
          finally
          {
             if (tc != null) tc.close();
          }
       }
    }

    결과적으로 모든 컴포넌트는 필요 시 메시지 리스너를 추가할 수 있으며, 이를 통해 컴포넌트가 각각의 클라이언트 등록자에 고유 스레드를 제공하는 것보다 더욱 확장 가능 방식으로 주제에 등록할 수 있습니다.

  2. 이 애플리케이션 컴포넌트에 필요한 작업 관리자 수를 판별하십시오.
  3. 관리 실행자, 스레드 팩토리, 컨텍스트 서비스 자원 환경 참조 또는 java:comp 네임스페이스에서 작업 관리자 자원 참조(또는 논리 이름)을 사용하여 작업 관리자를 검색하십시오. (자원 환경 참조 및 자원 참조에 대한 자세한 정보는 참조 주제를 참조하십시오.)
    InitialContext ic = new InitialContext();
    ManagedExecutorService executor = (ManagedExecutorService)ic.lookup("java:comp/env/concurrent/myWorkManager");
    관리 실행자에 대한 자원 환경 참조(예: concurrent/myWorkManager)는 애플리케이션 배치 디스크립터의 자원 환경 참조 또는 @Resource 어노테이션으로 선언되어야 합니다.
  4. Callable 또는 Runnable 태스크 인스턴스를 매개변수로 사용하여 ManagedExecutorService.submit() 메소드를 호출하십시오. 예를 들어 다음과 같습니다.
    Callable<Boolean> task = new MyTask(...);
    Future<Boolean> future = executor.submit(task);

    Future는 컴포넌트에서 제출된 태스크 간의 링크를 제공하는 핸들입니다.

  5. 옵션: 애플리케이션 컴포넌트가 하나 이상의 태스크의 완료를 기다려야 하는 경우 Future.get() 메소드를 호출하십시오. 예를 들어 다음과 같습니다.
    Future<String> futureA = executor.submit(taskA);
    Future<String> futureB = executor.submit(taskB);
    futureA.get(5, TimeUnit.SECONDS);
    futureB.get(5, TimeUnit.SECONDS);

    또는, invokeAll() 메소드를 사용하여 다중 태스크를 제출하고 완료될 때까지 기다릴 수 있습니다. 예를 들어 다음과 같습니다.

    tasks = Arrays.asList(taskA, taskB);
    futures = executor.invokeAll(tasks, 5, TimeUnit.SECONDS);
        // we can check future.isDone() to see which, if any, finished.

    이 메소드는 컴포넌트가 모든 작업 오브젝트의 완료를 기다리는 태스크의 콜렉션을 사용합니다. 또한 제한시간 값을 지정할 수 있습니다.

  6. Future.cancel(true) 메소드를 사용하여 태스크를 인터럽트하도록 하십시오.

    태스크를 구현하여 인터럽트에 즉각적으로 응답하거나 가능하면 빨리 실행을 중지하십시오.


주제 유형을 표시하는 아이콘 태스크 주제



시간소인 아이콘 마지막 업데이트 날짜: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tasb_devwkobj
파일 이름:tasb_devwkobj.html