I have a problem where i have to print the numbers in such format.
First  1
First  2
Second  3
Second  4
First  5
First  6
Second  7
Second  8
First  9
and so on...
I have implemented my runnable interface as below.
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();
  }
 }
}
My main class is as follows
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();
 }
}
when i run the program i am getting the output as follows
First  1
First  2
Second  1
Second  2
First  3
First  4
Second  3
Second  4
Instead of previously expected results. But when I Change the integer to atomic integer type i start getting the expected result. can anyone explain what is i can do to make it run with integer instead of using atomic integer
 
     
     
     
     
    