當線程訪問鎖定對象時,有什麼辦法可以運行一段代碼嗎?當線程被內部鎖定阻塞時執行代碼
public class Student implements Runnable {
private String name;
private Workshop w;
public Student(String name,Workshop workshop) {
this.name = name;
this.w=workshop;
}
@Override
public void run() {
this.w.getReady();
this.w.file(this.name);
this.w.cut(this.name);
this.w.punch(this.name); //Synchronized Method
if(Thread.currentThread().getState()==Thread.State.BLOCKED)
System.out.println(this.name+" is waiting in queue");
System.out.println(this.name+" has finished and is going home");
}
}
這是一個模擬車間的場景,每個學生都必須對金屬工件進行歸檔,切割和打孔。
由於衝壓輪流轉,我已經宣佈它是同步的,因爲每個學生(線程)將不得不等待輪到他們衝。
所有我想知道的是,如果有一些內置的方法或一種方法來編寫一個方法,當一個線程被阻塞並且正在等待內部鎖被解鎖時被執行。
例
public void onBlock() {
System.out.println(this.name+" is waiting in queue");
...
}
據我所知,不 - 如果你的線程在等待某件事情,它不能停止並執行其他事情(沒有一些*真正討厭的解決方法)。我不完全確定,但是,所以不回答... – awksp