우선 스레드 및 공유 변수를 처음 사용합니다. 그래서 제발 친절 하구요 ;-)공유 스레드 변수 읽기 및 쓰기
나는 Routing
이라는 수업을 진행하고 있습니다. 이 클래스는 메시지를 수신하고 처리합니다. 메시지 유형이 A
인 경우 Routing
-Object는 Runnable
인터페이스를 구현하는 ASender
개체로 전달해야합니다. 메시지 유형이 B
인 경우 Routing
-Class는 BSender
개체로 전달해야합니다.
그러나 개체에는 Routing
-Object에 저장해야하는 공통 변수가 있습니다.
내 아이디어는 Routing
-Object와 getter/setter에서도 변수를 synchronized/volatile로 선언하는 것입니다.
코드를 동기화하는 올바른 방법입니까? 아니면 뭔가 빠졌습니까?
편집 : 기본 코드 아이디어가 추가되었습니다.
RoutingClass
public class Routing {
private synchronized Hashtable<Long, HashSet<String>> reverseLookup;
private ASender asender;
private BSender bsender;
public Routing() {
//Constructor work to be done here..
reverseLookup = new Hashtable<Long, HashSet<String>>();
}
public void notify(TopicEvent event) {
if (event.getMessage() instanceof AMessage) {
asender = new ASender(this, event.getMessage())
} else if (event.getMessage() instanceof BMessage) {
bsender = new BSender(this, event.getMessage())
}
}
public synchronized void setReverseLookup(long l, Hashset<String> set) {
reverseLookup.put(l, set);
}
public synchronized Hashtable<Long, Hashset<String>> getReverseLookup() {
return reverseLookup;
}
}
ASender 클래스
public class ASender implements Runnable {
private Routing routing;
private RoutingMessage routingMessage;
public ASender(Routing r, RoutingMessage rm) {
routing = r;
routingMessage = rm;
this.run();
}
public void run() {
handleMessage();
}
private void handleMessage() {
// do some stuff and extract data from the routing message object
routing.setReverseLookup(somethingToSet)
}
}
. 코드 문제. –
[내가 전문가라고 생각하나요?] (http://programmer.97things.oreilly.com/wiki/index.php/The_Guru_Myth) –
좋아요, 이해합니다 .. 코드를 추가하겠습니다 ... – smsnheck