import java.util.ArrayList;
import java.util.List;
public class ThreadB extends Thread {
private static List<String> list1 = new ArrayList<String>();
private static List<String> list2 = new ArrayList<String>();
private static final Object mutex = new Object();
public void run() {
try {
sleep(2000l);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (mutex) {
list1.add("Hello");
System.out.println("Added for 1 " + list1.size());
list2.add("Added for 2");
System.out.println("Added for 2 " + list2.size());
mutex.notify();
}
}
public static void main(String[] args) {
ThreadB a1 = new ThreadB();
ThreadB a2 = new ThreadB();
a1.start();
a2.start();
new ThreadB().m1();
}
private void m1() {
synchronized (list1) {
System.out.println(list1.size());
System.out.println(list2.size());
try {
list1.add("hello");
System.out.println("m1 ::: " + list1.size());
sleep(5000l);
System.out.println("Oh mY God");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
Output is
0
0
m1 ::: 1
Added for 1 2
Added for 2 1
Added for 1 3
Added for 2 2
Oh mY God
After locking list1, how other threads are going to access that list?