java线程实例题_java线程相关试题实例源码代码
java線程相關(guān)試題實(shí)例源碼代碼。
/**
* 計(jì)算輸出其他線程鎖計(jì)算的數(shù)據(jù)
*/
class ThreadA {
public static void main(String[] args) {
ThreadB b = new ThreadB();
//啟動計(jì)算線程
b.start();
//線程A擁有b對象上的鎖。線程為了調(diào)用wait()或notify()方法,該線程必須是那個對象鎖的擁有者
synchronized (b) {
try {
System.out.println(“等待對象b完成計(jì)算。。。”);
//當(dāng)前線程A等待
b.wait(); //這里并不是讓b去wait,是b的所有者線程wait,但是這個線程的蘇醒的條件是b的notify或notifyAll方法的調(diào)用而且
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(“b對象計(jì)算的總和是:” + b.total);
}
}
}
/**
* 計(jì)算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;
}
//(完成計(jì)算了)喚醒在此對象監(jiān)視器上等待的單個線程,在本例中線程A被喚醒
notify();
}
}
}
notify():
(喚醒)
(在此對象監(jiān)視器上)
(等待的)
(單個)
(線程)。
A a = new A();
a.notify();
a是對象監(jiān)視器
notify()是類A的成員方法
因此wait、notify、notifyAll都屬于同一個對象監(jiān)視器
解決死等問題的途徑:
通過某一條件來判斷對象監(jiān)視器是否以及執(zhí)行了notifyAll()
1)如果已執(zhí)行,則避免自己被監(jiān)視器wait()
2)如果沒執(zhí)行,則可以放心大膽的去被wait(),因?yàn)檫t早都會被notifyAll()
總結(jié)
以上是生活随笔為你收集整理的java线程实例题_java线程相关试题实例源码代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java hashmap value_J
- 下一篇: java如何读取下拉列表的值_java