У меня проблема с печатью чисел в таком формате.
First 1
First 2
Second 3
Second 4
First 5
First 6
Second 7
Second 8
First 9
and so on...
Я реализовал свой работающий интерфейс, как показано ниже.
class ThreadDemo implements Runnable {
public volatile Integer num;
public Object lock;
public ThreadDemo(Integer num, Object lock) {
this.num = num;
this.lock = lock;
}
@Override
public void run() {
try {
while (true) {
int count = 0;
synchronized(lock) {
Thread.sleep(100);
while (count < 2) {
System.out.println(Thread.currentThread().getName() + " " + num++);
count++;
}
lock.notify();
lock.wait();
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Мой основной класс выглядит следующим образом
public class CoWorkingThreads {
private static volatile Integer num = new Integer(1);
public static void main(String...args) {
Object lock = new Object();
Thread thread1 = new Thread(new ThreadDemo(num, lock), "First");
thread1.start();
Thread thread2 = new Thread(new ThreadDemo(num, lock), "Second");
thread2.start();
}
}
, когда я запускаю программу, которую я получаювывод выглядит следующим образом:
First 1
First 2
Second 1
Second 2
First 3
First 4
Second 3
Second 4
Вместо ожидаемых ранее результатов.Но когда я меняю целое число на атомарный целочисленный тип, я начинаю получать ожидаемый результат.Может кто-нибудь объяснить, что я могу сделать, чтобы заставить его работать с целым числом вместо использования атомного целого числа