현재 The Well-Grounded Java Developer 책에서 동시성에 관한 섹션을 읽었으며 블록 동시성을 보여주는이 코드 샘플은 교착 상태에 있어야하지만 지금까지 볼 수는 없습니다. 여기에 코드입니다 : 나는 그것을 실행하면이 예에서 교착 상태는 어디에 있습니까?
public class MicroBlogNode implements SimpleMicroBlogNode {
private final String ident;
public MicroBlogNode(String ident_){
ident = ident_;
}
public String getIdent(){
return ident;
}
public static Update getUpdate(String _name){
return new Update(_name);
}
public synchronized void propagateUpdate(Update upd_, MicroBlogNode backup_){
System.out.println(ident + ": received: " + upd_.getUpdateText() + " ; backup: " + backup_.getIdent());
backup_.confirmUpdate(this, upd_);
}
public synchronized void confirmUpdate(MicroBlogNode other_, Update update_){
System.out.println(ident + ": received confirm: " + update_.getUpdateText() + " from " + other_.getIdent() + "\n");
}
public static void main(String[] args) {
final MicroBlogNode local = new MicroBlogNode("localhost");
final MicroBlogNode other = new MicroBlogNode("remotehost");
final Update first = getUpdate("1");
final Update second = getUpdate("2");
new Thread(new Runnable() {
public void run() {
local.propagateUpdate(first, other);
}
}).start();
new Thread(new Runnable() {
public void run() {
other.propagateUpdate(second, local);
}
}).start();
}
}
내가 얻을 다음과 같은 출력 :
localhost: received: 1 ; backup: remotehost
remotehost: received confirm: 1 from localhost
remotehost: received: 2 ; backup: localhost
localhost: received confirm: 2 from remotehost
이 책은 코드를 실행하는 경우, 당신은 일반적으로 교착 상태-모두의 예를 볼 수 있다고 말한다 스레드가 업데이트 수신을보고하지만 어느 쪽도 백업 스레드 인 에 대한 업데이트 수신을 확인하지 못합니다. 그 이유는 확인 메소드가 진행되기 전에 보유하고있는 잠금을 해제하기 위해 각 스레드가 다른 스레드를 요구하기 때문입니다.
내가 알 수있는 한,이 경우가 아니라는 것을 알 수 있습니다. 각 스레드는 그들이 백업 스레드 인 업데이트를 수신하는 것을 확인합니다.
미리 감사드립니다.
이것이 책의 예입니까? 'Update' 클래스를 보여주세요. –
'getUpdateText' 메소드는 어디에 있습니까? – wheaties