java线程实例题_java线程相关试题实例源码代码
java線程相關試題實例源碼代碼。
/**
* 計算輸出其他線程鎖計算的數據
*/
class ThreadA {
public static void main(String[] args) {
ThreadB b = new ThreadB();
//啟動計算線程
b.start();
//線程A擁有b對象上的鎖。線程為了調用wait()或notify()方法,該線程必須是那個對象鎖的擁有者
synchronized (b) {
try {
System.out.println(“等待對象b完成計算。。?!?;
//當前線程A等待
b.wait(); //這里并不是讓b去wait,是b的所有者線程wait,但是這個線程的蘇醒的條件是b的notify或notifyAll方法的調用而且
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(“b對象計算的總和是:” + b.total);
}
}
}
/**
* 計算1+2+3 … +100的和
*
* @author leizhimin 2008-9-15 13:20:49
*/
class ThreadB extends Thread {
int total;
public void run() {
System.out.println(“xxxxxxxxxxxxxxxxxrrrrrrrrrrrrrrrrrrrrrx”);
synchronized (this) {
System.out.println(“xxxxxxxxxxxxxxxxxx”);
for (int i = 0; i < 101; i++) {
total += i;
}
//(完成計算了)喚醒在此對象監視器上等待的單個線程,在本例中線程A被喚醒
notify();
}
}
}
notify():
(喚醒)
(在此對象監視器上)
(等待的)
(單個)
(線程)。
A a = new A();
a.notify();
a是對象監視器
notify()是類A的成員方法
因此wait、notify、notifyAll都屬于同一個對象監視器
解決死等問題的途徑:
通過某一條件來判斷對象監視器是否以及執行了notifyAll()
1)如果已執行,則避免自己被監視器wait()
2)如果沒執行,則可以放心大膽的去被wait(),因為遲早都會被notifyAll()
總結
以上是生活随笔為你收集整理的java线程实例题_java线程相关试题实例源码代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java hashmap value_J
- 下一篇: java多线程间的通信传值_Java 多