---------------------- asp.net+unity開發、.net培訓、期待與您交流! ---------------------
執行緒間通訊-示例**-解決安全問題
執行緒間通訊,就是多個執行緒在操作同乙個資源,但是操作的動作不同。
執行緒間通訊-等待喚醒機制
wait() notify() notifyall()
都使用在同步中,因為要對持有監視器(
鎖)的執行緒操作
所以要使用在同步中,因為只有同步才具有鎖 。
這些方法在操作同步中線程時,都必須要標識它們所操作持有的
鎖,只有同乙個
鎖上的被等待執行緒可以被同乙個
鎖 的notify喚醒,不可以對不同鎖中的執行緒進行喚醒,也就是說,等待和喚醒的必須是同乙個鎖
鎖可以是任意物件
,所以可以被任意物件呼叫的方法定義在object類中
class res
catch(exception e){};
} this.name = name;
this.*** = ***;
flag = true;
this.notify();
} public synchronized void out()
catch(exception e){};
} system.out.println(name+"-"+***);
flag = false;
this.notify(); }}
class input implements runnable
public void run()
else
x = (x+1)%2;
} }}class output implements runnable
public void run() }
}public class inputoutputdemo
}
執行緒間通訊-生產者消費者
class resource
catch(exception e){};
} this.name = name+"--"+count++;
system.out.println(thread.currentthread().getname()+"-生產者-"+this.name);
flag = true;
this.notifyall();
} public synchronized void out()
catch(exception e){};
} system.out.println(thread.currentthread().getname()+"--消費者--"+this.name);
flag = false;
this.notifyall(); }}
class producer implements runnable
public void run() }
}class consumer implements runnable
public void run() }
}public class producerconsumerdemo
}
執行緒間通訊-生產者消費者jdk5.0公升級版
jdk1.5提供了多執行緒的公升級解決方案,將同步synchronized替換成顯式的lock操作
將object中的wait,notify,notifyall替換成了condition物件,該物件可以通過lock鎖進行獲取。
該示例中實現了本方只喚醒對方的操作
class resource
this.name = name+"--"+count++;
system.out.println(thread.currentthread().getname()+"-生產者-"+this.name);
flag = true;
condition_con.signal();
} finally
}public synchronized void out() throws interruptedexception
system.out.println(thread.currentthread().getname()+"--消費者--"+this.name);
flag = false;
condition_pro.signal();
} finally
}}class producer implements runnable
public void run()
catch(interruptedexception e)
} }}
class consumer implements runnable
public void run()
catch(interruptedexception e)
} }}
public class producerconsumerdemo2
}
停止執行緒
interrupt
停止執行緒,run方法結束。開啟多執行緒執行,執行**通常是迴圈結構,只要控制住迴圈,就可以讓run方法結束,也就是執行緒結束。
特殊情況:當執行緒處於凍結狀態,就不會讀取標記,那麼執行緒就不會結束。
當沒有指定的方式讓凍結狀態的執行緒恢復到執行狀態時,這是需要對凍結進行清除,強制讓縣城恢復到執行狀態中來,這樣就可以操作標記讓執行緒結束。
thread類中提供了該方法 interrupt();
class stopthread implements runnable
catch(interruptedexception e)
system.out.println(thread.currentthread().getname()+"..run");
} }public void changeflag() }
public class stopthreaddemo
system.out.println(thread.currentthread().getname()+"..."+num);
} }}
守護執行緒
setdaemon();
join方法
當a執行緒執行到了b執行緒的join()方法時,a執行緒就會的等待,等b執行緒執行完,a執行緒才會執行。
join可以用來臨時加入執行緒執行。
class demo implements runnable }}
public class joindemo
system.out.println("over");
}}
t1都執行完,t2和main才執行
----------------------asp.net+unity開發、.net培訓、期待與您交流! ----------------------
詳細請檢視:
黑馬程式設計師 多執行緒
windows phone 7手機開發 net培訓 期待與您交流!一 程序與執行緒 l 程序 乙個執行的程式就是乙個程序,程序包括執行中的程式和程式需要用到的記憶體和系統資源 乙個程序至少有乙個執行緒,乙個程序中多個執行緒可以併發執行 l 執行緒 程式中的乙個執行流,每個執行緒都有自己的專有暫存器 ...
黑馬程式設計師 多執行緒
asp.net android io開發 net培訓 期待與您交流!執行緒與程序的關係 乙個程式就相當於乙個程序 乙個程序至少有乙個執行緒 同乙個程序中的多個執行緒之間可以 併發 執行 執行緒 1 乙個執行緒一次只能完成乙個任務 2 多執行緒方法重入 cpu是不斷的在多個執行緒之間來回切換執行的 3...
黑馬程式設計師 多執行緒
asp.net android ios開發 net培訓 期待與您交流!多執行緒為什麼要用多執行緒?1 讓計算機 同時 做多件事情,節約時間。2 後台執行程式,提高程式的執行效率,也不會使主介面出現無響應的情況。3 多執行緒可以讓乙個程式 同時 處理多個事情。4 計算機cpu 大部分時間處於空閒狀態,...