This question 2 년 전 질문했지만 리소스에 도움이되지 않거나 더 이상 유효하지 않습니다. Phaser을 이해하는 데 유용한 자습서가 있어야합니다. 나는 javadoc을 읽었지만, 실제로는 javadoc을 이해하기 위해서는이 클래스들을 어떻게 사용해야하는지 알 필요가있다. 누구든지 의견이 있으십니까?
Phaser을 사용하여 Java 코드에서 동기화를 시도합니다. 문서에 등록 된/등록되지 않은 "당사자"가 계속 언급됩니다 ... 이 컨텍스트에서 "당사자"는 무엇입니까? 그것은 하나의 실행 스레드를 참조합니까? 다양한 출처의 문서를 계속해서 읽지 만 모든 사람들은이 사실을 알고 있다고 가정합니다. 무슨 일이 일어나고 있는지 더 잘 이해하기 위해 읽을 수있는
을 감안할 때 : Executor executor = ...;
Phaser phaser = new Phaser(n);
for (int i=0; i<n; ++i)
{
Runnable task = new Runnable()
{
public void run()
{
phaser.arriveAndDeregister
요청 매핑이있는 스프링 @Controller가 있습니다. 요청을 받으면 지연된 결과를 만들고 위임자 클래스에서 메서드를 실행합니다. 컨트롤러에서 : @ResponseBody
@RequestMapping(MenuModelCodes.MENU_NAME)
DeferredResult<HttpEntity<?>> getModelCodesWithClass(String
소수의 스레드를 생성하여 실행시 목록에 배치하려고합니다. 그들이 처리를 완료함에 따라 발표 결과를 수집하고 싶습니다. 그렇게하면 많은 스레드를 포함하는 목록을 가질 수있게되고 나서 사용할 수있게되면 future.get을 호출하고 콜백 정보를 사용할 수 있습니다. 어떤 이유로 든 나는 많은 결과를 놓치고 있습니다. 코드를 단계별로 실행하면 f.get()이 전
스레드 풀에 제출 된 모든 작업이 완료된 후에 만 executeTasks() 메서드에서 반환하고 싶습니다. 제 스레드 풀은 구성 가능한 threadpoolsize를 가지고 있으며 보조 큐로 SynchronousQueue을 사용하므로 스레드를 사용할 수있을 때만 작업을 제출하여 my for 루프가 안전하게 진행된다는 점에 유의하십시오. 그래서, 나는 단지
이렇게 유연한 Phaser가 있지만 무언가를 놓친 것 같습니다. CyclicBarrier를 성공적으로 사용했지만 이제는 내가 말한 것처럼 더 유연한 무언가를 원합니다. 선언 :이 private static final CountDownLatch synchronizer = new CountDownLatch(1);
private static AtomicBool
, 페이저이 계층화 될 수있다 (즉, 트리 구조로 구성) 충돌을 줄이기 위해. 그렇지 않으면 과도한 동기화 경합 비용이 발생할 수있는 다수의 당사자를 가진 페이 서가 대신 하위 페이 셔 그룹이 공통 상위를 공유하도록 설정할 수 있습니다. 이는 작업 당 오버 헤드가 증가하더라도 처리량을 크게 높일 수 있습니다. 누구나이 내용을 분명히 할 수 있습니까? 조금