2012-01-03 5 views
0

Java 1.6의 동시성 기능을 사용하여 오프라인으로 일부 작업을 실행하고 있습니다. 사용자가 등록을 통해 생성 될 때, 내가가 있어요, 좀 사내 로깅 작업 내가 사용자를 차단하지 않으 &를 수행해야합니다, 그래서 여기에 아래의 코드Java의 ExecutorService를 통한 동시성

java.util.concurrent.ExecutorService myservice = Executors.newSingleThreadExecutor(); 
    myservice.execute(new myTask(user)); 

을 사용하고 Run 메서드에서 Runnable &을 구현하는 내부 클래스 myTask, 오프라인 작업을 수행하고 있습니다 (따라서 비 차단 호출로 만듭니다).

이제 사용자가 웹 사이트에 로그인하면 유사한 오프라인 활동을 수행해야하는 특정 작업 (웹 페이지의 버튼)이 있습니다. & 차단 통화로 전화를 걸지 않습니다. 이 페이지에는 오프라인 작업을 수행해야하는 4 가지 작업이 있습니다.

내부 클래스가 4 개인 다른 비슷한 코드를 사용해도 괜찮습니까? & 오프라인 활동을 수행합니까 ?? 그렇지 않다면 대안은 무엇입니까?

감사합니다.

답변

0

높은 수준의 동시 요청이 예상되지 않으면 실행 프로그램을 사용할 수 있습니다. 이 경우 Thread pool을 사용하십시오.

당신이 매우 동시적인 응용 프로그램이고 (jvm 크래시조차도) 조치 처리를 보장해야하며 조치가 트랜잭션이되도록하려면 메시징 (JMS)이 해결책 일 수 있습니다.

성공적으로 웹 응용 프로그램에서 성공적으로 풀과 함께 실행 프로그램을 사용했습니다. 그러나 스레드가 컨테이너에 의해 관리되지 않기 때문에 EJB에서 허용되지 않는 웹 응용 프로그램에서 스레드를 생성하는 것은 좋지 않습니다.

static final int POOL_SIZE=10; 
ExecutorService pool = Executors.newFixedThreadPool(POOL_SIZE); 

당신이 좋은 기사 읽을 수 있습니다 : 당신이 사용할 수있는 스레드보다 더 많은 작업을 가능하게하기위한 스레드 안전 대기열을 사용한다 Java Concurrency

+0

Struts 액션 내에서 Struts2 &를 사용하고 있습니다.이 실행 프로그램 스레드가 있습니다. 스레드 풀을 구현하는 방법에 대한 샘플 라인을 제공 할 수 있습니까? 스레드 풀 크기를 구성해야합니까? 그렇다면 어디에서? 나는 바람둥이 6 서버를 사용하고 있습니다. – Mike

+0

@Mike가 샘플 코드를 추가했습니다. 트레드 풀을 한 번만 만들고 종료하려면 웹 응용 프로그램을 종료해야합니다. –

+0

저는 아직이 API를 사용하지 않고 있습니다. newFixedThreadPool을 호출 한 것을 볼 수 있습니다. 그렇다면 Runnable 인터페이스를 구현하는 내 클래스 인 myTask를 어떻게 호출할까요? pool.execute (new myTask (user))를 호출해야합니까? 또한 10 명이 넘는 사용자가 웹 사이트에 액세스하려고하면 어떻게됩니까? – Mike

0

추가에서 당신의 스레드 풀에 있습니다.

관련 문제