我是新來的Java。我的老師給了我一個關於多線程的功課,其中有兩個線程Example和Example1。 示例對線程進行更改,並且Example1將其讀取。 但是,當我執行Example1線程無法正常工作。線程不共享相同的數據變量
例螺紋:
public class Example extends Thread {
public int[] array = {2,1,0,5,9};
public void run(){
for(int i=0; i<array.length;i++){
array[i] = array[i]+i;
System.out.println(getName()+" : "+array[i]);
}
}
}
例1螺紋:
public class Example1 extends Example implements Runnable {
@Override
public void run(){
for(int i=0;i<array.length;i++){
System.out.println(getName()+" : "+array[i]);
}
}
}
主要:
public class TestExample {
public static void main(String[] args) {
Example t1 = new Example();
t1.setName("t1");
t1.start();
Example1 obj = new Example1();
Thread t2 = new Thread(obj);
t2.setName("t2");
t2.start();
}
}
並且輸出是:
t1 : 2
t1 : 2
t1 : 2
t1 : 8
t1 : 13
Thread-1 : 2
Thread-1 : 1
Thread-1 : 0
Thread-1 : 5
Thread-1 : 9
線程示例1無法讀取int []數組中已更改的值,即使Example已經對int []數組進行了更改。 可能是什麼問題以及如何糾正?
您正在使用兩個單獨的實例。所以在任何地方都沒有共享變量。而且,這兩個類都很奇怪。首先,任何從'Thread'繼承的類都默認實現'Runnable'。由於'Example1'繼承自'Thread'繼承的'Example',因此根據定義,它也是'Runnable'。你確定這些是你老師給你的課嗎? – RealSkeptic
當我從Example1線程中移除實現時,它仍然給我相同的結果,但仍然沒有讀取int []數組。 – IHS
刪除實現不會改變這一點。有* no *共享變量。你有一個'''你用'new'創建的實例。你有'new'創建的'Example1'的另一個實例。每個實例都有自己的'array'副本。他們沒有共享相同的'陣列'。也許你應該向我們展示你從老師那裏得到的原始作業,一個字一個字。 – RealSkeptic