2012-02-11 6 views
3

우리는 실행 가능한 구현하는 하나의 클래스의 주요 방법 다른 클래스에서 호출 할 때 가장 쉬운 구현은 다음과 같습니다 패킷 값을 수신하고 루프 내가 그 값을 보낼 때 수신기 내부간 스레드 통신

public static void main(String [] args){ 

    // declarations ... 


    receiver.start(); 
    player.start(); 


} 

말은 내가 가진 두 번째 스레드로. 그렇게하는 방법?

명확히하기 위해 하나의 스레드가 다른 스레드를 제어하는 ​​것에 신경 쓰지 않고 첫 번째 스레드가 두 번째 스레드와 값을 공유하기를 원합니다.

작은 질문은 제쳐두고 - JDK 7 포크가 Java 동시 API의 성능을 크게 향상 시키나요?

+1

이 게시물에서 전리품을 얻으십시오. http://stackoverflow.com/questions/2170520/inter-thread-communication-in-java 도움을받을 수 있습니다. –

+0

그것은 좋다. 그러나 지금 나는 혼란 스럽다, 사람의 수 - 해결책의 수. – Aubergine

답변

4

간단한 옵션은 java.util.concurrent.atomic.AtomicReference (또는 one of the other Atomic... classes)을 사용하는 것입니다, 시간 내 주셔서 감사합니다. AtomicReference의 단일 인스턴스를 만들고이를 다양한 스레드가 실행되는 코드에 전달하고 수신 스레드에서 값을 설정하십시오. 다른 스레드는 스레드 세이프 (thread-safe) 방식으로 여유있게 값을 읽을 수 있습니다.

않습니다 JDK 7 포크 정말 자바 동시 API 성능이 크게 향상됩니까?

아니요, 몇 가지 사항을 더 쉽게 만들 수있는 새로운 API입니다. 일을 더 빨리하는 것은 아닙니다.

1

java.util.concurrent 패키지에는 스레드간에 안전하게 통신하기위한 유용한 인터페이스와 클래스가 많이 포함되어 있습니다. 여기에 귀하의 유스 케이스를 잘 모르겠지만 player (생산자)이 receiver (소비자)에 작업을 전달해야한다면, 예를 들어 BlockingQueue 구현을 사용할 수 있습니다.

+0

다른 방법으로는 수신기가 값을 가져 와서 플레이어에게 전달합니다. – Aubergine