我學習Java和有關線程和有這樣的代碼:Java併發和範圍
Integer target = (int) (Math.random() * 1000);
System.out.println("The number is " + target);
Monitor mThread = new Monitor();
mThread.start();
Finder finder1 = new Finder(0,249,target,mThread);
Finder finder2 = new Finder(250,499,target,mThread);
Finder finder3 = new Finder(500,749,target,mThread);
Finder finder4 = new Finder(750,1000,target,mThread);
Thread t1 = new Thread(finder1,"T1");
t1.start();
mThread.addThread(t1);
Thread t2 = new Thread(finder2,"T2");
t2.start();
mThread.addThread(t2);
Thread t3 = new Thread(finder3,"T3");
t3.start();
mThread.addThread(t3);
Thread t4 = new Thread(finder4,"T4");
t4.start();
mThread.addThread(t4);
取景器類接受範圍和數量進行檢查,看它是否在這個範圍內。運行代碼時,在Finder中使用最終變量之前,只有最後一個數字範圍纔會用於測試。
我以爲新的Finder會實例化一個全新的對象,爲什麼finder4的變量在finder4的範圍中改變?
顯示Finder類的代碼。 –
Maurício說什麼。在Finder的實現中,這個問題非常明顯。它幾乎聽起來像你正在初始化的字段是靜態的。 – Mumbleskates