다음 시나리오가 있습니다. 음악을 재생하려고하는 2 명의 DJ가 있지만, 다른 DJ가 동일한 CD를 재생하지 않는 경우에만 분명히 CD를 재생할 수 있습니다. 그 순간 그래서 난 그 클래스와 메신저가 다른 스레드에 대한 CD를 고정 동기화를 사용하려고해야다른 스레드의 일부만 기다리는 중 - Java
public class cd {
private boolean played = false;
public void play() {
this.played = true;
Thread.sleep(2000);
}
//other methods, e.g. skip a song or put the CD back in the collection
public boolean isAvailable() {
return !(this.played);
}
}
public class turntable {
private boolean used = false;
public void use() {
this.played = true;
Thread.sleep(2000);
}
public boolean isFree() {
return !(this.used);
}
...
}
DJ 클래스 :
public class DJ implements Runnable {
CD disk;
Turntable tt;
//constructor
public void run() {
//do something else, e.g. go to the bar
tt.use();
disk.play();
disk.skipSong();
disk.putBack();
tt.leave();
//do something else, e.g. smoke a cigarette
}
}
그리고 지금은 현재의 CD를 차단하기 위해 노력하고있어 DJ_1의 경우 DJ_1이이 부분에있는 동안 :
CD를 차단해야합니다 부 : DJ_1 다시 넣어하지만 지금은 담배를 흡연하는 경우
tt.use();
disk.play();
disk.skipSong();
disk.putBack();
tt.leave();
그러나 CD는 분명히 사용할 수 있습니다.
내 질문은 ... 어떻게 스레드의 실행 메서드의 일부만 차단하고 다른 스레드의 동일한 부분과 관련하여 설정할 수 있습니다 (염두에두고 동기화하여 문제를 해결하려고 시도 함))
DJ가 동시에 재생할 수있는 CD인지 아니면 동시에 사용할 수없는 턴테이블인지 직접 물어야한다고 생각합니다. . CD의 –