我想熟悉SCJP的Java線程,我有一個問題。爲什麼java線程wait()只能在這裏使用時間限制?
在下述編寫的代碼我簡單地創建的: 2周的Runnable與 共同的數據存儲(一個陣列)和 同步write()方法用的數據依次留下一個字母作爲標記用於每個可運行以填充它(A和B)。
我知道代碼很粗糙,可以寫得更好,但我正在尋求線程的道德。
所以,現在當我運行它,它永遠不會終止,結果停在:
還是不錯的。 A0。
但是,當我改變等待()等待(100)它工作正常計數從0到9,它正常結束。請問有人能解釋我背後的原因嗎?
謝謝。
public class ArrayThreads {
Object[] array = new Object[10];
boolean isA = true;
int position = 0;
int getIndex(){
return position;
}
class ThreadA implements Runnable{
synchronized void write(String value){
while(!isA){
try {
wait();
} catch (InterruptedException ex) {
System.out.println("An error in" + value);
ex.printStackTrace();
}
}
array[position] = value + position;
System.out.println(array[position]);
position++;
isA = !isA;
notify();
}
public void run() {
while(getIndex()<array.length){
if (getIndex()==9) return;
else
write("A");}
}
}
class ThreadB implements Runnable{
synchronized void write(String value){
while(isA){
try {
wait();
} catch (InterruptedException ex) {
System.out.println("An error in" + value);
ex.printStackTrace();
}
}
array[position] = value + position;
System.out.println(array[position]);
position++;
isA = !isA;
notify();
}
public void run() {
while(getIndex()<array.length){
if (getIndex()==9) return;
else
write("B");}
}
}
public static void main(String[] args){
ArrayThreads threads = new ArrayThreads();
Thread threadA = new Thread(threads.new ThreadA());
Thread threadB = new Thread(threads.new ThreadB());
System.out.println("Still good");
threadB.start();
threadA.start();
}
}