私は2つのスレッドを持っており、ある値より小さい間にint変数をインクリメントしたい。私のプログラムはそれを行いますが、2つの異なるスレッドは値を別々にインクリメントしません。
one
とtwo
は二つのスレッドであれば、私は出力がこのスレッドを使用してintをインクリメントする
one 1
two 2
one 3
two 4
one 5
two 6
one 7
two 8...
のようになりたいがここに私のプログラムです:
class IncTo100Demo implements Runnable {
public volatile int count = 0;
public void run() {
Thread current = Thread.currentThread();
try {
while(count < 21) {
System.out.println(current.getName() + " count = " + count++);
current.sleep(1000);
}
}
catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Thread one = new Thread(new IncTo100Demo(), "one");
Thread two = new Thread(new IncTo100Demo(), "two");
try {
one.start();
two.start();
System.out.println("one alive? " + one.isAlive());
one.join();
}
catch(Exception e) {
e.printStackTrace();
}
}
}
その出力は次のとおりです。
one alive? true
two count = 0
one count = 0
two count = 1
one count = 1
two count = 2
one count = 2
two count = 3
one count = 3
two count = 4
one count = 4
two count = 5
one count = 5
two count = 6
one count = 6
two count = 7
one count = 7
two count = 8
one count = 8
two count = 9
方法これらのスレッドで変数を個別に更新できるようにして、出力を私が望むように見せることができますか?
メソッドでsynchronizedキーワードを使用します。 –