I am trying out codes with multiple threads. Below is my code:
package com.thread.practice;
public class ThreadPratice1 {
    public static void main(String[] args) {
        MyRunnable r = new MyRunnable();
        Thread t1 = new Thread(r, "Thread 1");
        Thread t2 = new Thread(r, "Thread 2");
        t1.start();
        t2.start();
    }
}
package com.thread.practice;
public class MyRunnable implements Runnable {
    private static int i = 0;
    @Override
    public void run() {
        for(i = 0; i <10;i++){
            System.out.println("Thread: "+ Thread.currentThread().getName()
                    +" value of i: "+i);
            try {
                //System.out.println("Thread: "+ i);
                Thread.sleep(1000);
                //System.out.println("inside runnable: "+Thread.currentThread().getState());
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
But in the output it is always printing the value of i as 0 twice in the beginning.
Output is coming kind of like this:
Thread: Thread 1 value of i: 0
Thread: Thread 2 value of i: 0
Thread: Thread 1 value of i: 2
Thread: Thread 2 value of i: 2
Thread: Thread 1 value of i: 3
Thread: Thread 2 value of i: 4
Thread: Thread 1 value of i: 5
Thread: Thread 2 value of i: 6
Thread: Thread 1 value of i: 7
Thread: Thread 2 value of i: 8
Thread: Thread 1 value of i: 9
May someone please help me in understanding this issue?
 
     
     
     
     
    