変数を変更したjavaと同期メソッドでマルチスレッドコードを書きましたが、コードが同期していないため、乱数値が得られます。私のコードがあります:このマルチスレッドプログラムで同期メソッドが同期してアクセスされないのはなぜですか?
public class Main {
public static void main(String[] args) throws Exception {
Resource.i = 5;
MyThread myThread = new MyThread();
myThread.setName("one");
MyThread myThread2 = new MyThread();
myThread.start();
myThread2.start();
myThread.join();
myThread2.join();
System.out.println(Resource.i);
}
}
class MyThread extends Thread {
@Override
public void run() {
synMethod();
}
private synchronized void synMethod() {
int i = Resource.i;
if(Thread.currentThread().getName().equals("one")) {
Thread.yield();
}
i++;
Resource.i = i;
}
}
class Resource {
static int i;
}
私はいくつかの他のスレッドがこれを実行中の操作はアトミックでなければなりませんので、何のスレッドが、この方法で行くべきではありません理解と時々、私は時々、6、7を得るが、私はsynMethod
を同期しました、しかし、彼らはそうではありません、なぜ私は理解できませんか?それを私に説明して答えてください - どうすれば修正できますか?
。サブクラスのスレッドではないことをお勧めします。これは驚くべき結果をもたらす可能性があるためです。 –