2013-05-03 3 views
-1

저는 초보자 인 자바를 배우고 있습니다. 이제 질문이 생겼습니다. 누군가가 해결하도록 도울 수 있습니까? :)Java에서 두 스레드간에 변수를 공유하는 방법은 무엇입니까?

나는 hashmap 변수를 유지하는 Server라는 클래스가 있는데, send()와 receive()라는 두 개의 메소드가있다. 나는 두 가지 방법을 동시에 실행하기를 원합니다. send() 메서드는 hashmap 변수를 사용하고 receive() 메서드는 hashmap 변수를 변경합니다.

해결에 협조 해주십시오. 고마워요!

public class Server 
{ 
    private static Map<String,String> map = Collections.synchronizedMap(new HashMap<String, String>()); 

    public void send() 
    { 
     // 
     // Do some operation using map variable 
    } 

    public void receive() 
    { 
     // change the map variable as you want 
     // 
    } 
} 

답변

1

당신은 Collections.synchronizedMap(new HashMap());

편집 1을 사용할 수 있습니다. 공유를 제어하고 두 스레드가 동시에 수정하려고하지 못하게하는 잠금 또는 뮤텍스의 형태가 필요합니다.

또는, 당신은 단지 ConcurrentHashMap

+0

내 질문에 대한 코드 템플릿을 줄 수 있습니까? 코드를 작성하는 방법을 모르겠습니다. Thx – user2193727

+0

코드 주셔서 감사합니다! 어떻게 두 가지 방법을 동시에 실행할 수 있습니까? – user2193727

+0

다중 스레드 환경에서 프로그램을 실행 하시겠습니까 ?? – prasanth

0

항목은 기본적으로 공유되는 코드 템플릿 :

+0

내 질문에 대한 코드 템플릿을 줄 수 있습니까? 코드를 작성하는 방법을 모르겠습니다. Thx – user2193727

0

는 두 가지 해결책이 있습니다 사용할 수는 하나의 단순한 ConcurrentHashMap의 즉 해시 맵 안전 스레드를 사용하는 것입니다. JVM이 처리 할 동기화 문제에 대해 걱정할 필요가 없습니다. 이 같은위한 자바 독을 통과하는 것이 좋을 것입니다 :

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/ConcurrentHashMap.html

다른 방법은() 송신()를 동기화받을 방법 또는 해시 맵을 업데이트하는 방법의 부분이다.

+0

내 질문에 대한 코드 템플릿을 줄 수 있습니까? 코드를 작성하는 방법을 모르겠습니다. Thx – user2193727

1

보내기 및 받기 스레드를 생성하는 주 스레드에서 HashMap을 정의하십시오. 경주 상태가되지 않도록 SynchronizedMap을 사용해야합니다.

+0

내 질문에 대한 코드 템플릿을 줄 수 있습니까? 코드를 작성하는 방법을 모르겠습니다. Thx – user2193727

+0

이 질문은 전에 질문되었습니다. 맨 위에 나열된 질문을 체크 아웃 할 수 있습니다. 문제가 계속된다면, 우리가 도와 줄 수 있습니다. –

0

사용 COncurrentHashMap

그것은 차단할 필요없이 여러 스레드에서지도의 동시 변경을 할 수 있습니다.

관련 문제