我不明白爲什麼沒有線程永遠不會進入方法等書面synchronized方法的Java
public class File {
private boolean writing = false;
public synchronized void write()
{
String name = Thread.currentThread().getName();
while(this.writing == true){
System.out.println(name +" wait ");
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.writing=true;
System.out.println(name +" writing ");
try{
Thread.sleep((int)(Math.random()*3000));
} catch(InterruptedException e){
e.printStackTrace();
}
this.writing=false;
System.out.println(name +" writing end ");
this.notifyAll();
}
}
public class M_thread extends Thread{
File file;
public M_thread(String name,File f){
super(name);
this.file=f;
}
public void run(){
while(true){
file.write();
}
}
}
public class Main {
public static void main(String[] args) {
File file=new File();
new M_thread("t1",file).start();
new M_thread("t2",file).start();
new M_thread("t3",file).start();
}
}
在我的代碼,我可以防止因睡眠編寫的模擬方法飢餓的問題呢?因爲如果一個線程進入睡眠很長一段時間總是永遠不會超過一個,你把睡覺的時間很短
我錯了,你應該換真的假,但它只是一個後勤錯誤代碼java應該更正 – alexander 2014-11-24 20:56:05
請編輯您的問題,以反映這一點。 – 2014-11-24 20:57:56
是的,當然..我有添加它。 – alexander 2014-11-24 21:20:55