public class TestThread {
public void a() {
System.out.println("Enter in A");
for (int i = 0; i < 10; i++) {
System.out.println("
Thread Name " + Thread.currentThread());
try {
Thread.sleep(100);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void main(
String... args) throws InterruptedException {
TestThread t = new TestThread();
Thread tr = new Thread(new Thre(t), "MyThreads");
tr.start();
System.out.println("Going in Syn block");
t.a();
}
}
class Thre implements Runnable {
TestThread t;
Thre(TestThread t) {
this.t = t;
}
@Override
public void run() {
t.a();
}
It had the output as:
Going in Syn block
Enter in A
Enter in A
Thread Name Thread[MyThreads,5,main]
Thread Name Thread[main,5,main]
Thread Name Thread[MyThreads,5,main]
Thread Name Thread[main,5,main]
Thread Name Thread[MyThreads,5,main]
Thread Name Thread[main,5,main]
Thread Name Thread[MyThreads,5,main]
Thread Name Thread[main,5,main]
Thread Name Thread[MyThreads,5,main]
Thread Name Thread[main,5,main]
Thread Name Thread[MyThreads,5,main]
Thread Name Thread[main,5,main]
Thread Name Thread[MyThreads,5,main]
Thread Name Thread[main,5,main]
Thread Name Thread[MyThreads,5,main]
Thread Name Thread[main,5,main]
Thread Name Thread[MyThreads,5,main]
Thread Name Thread[main,5,main]
Thread Name Thread[MyThreads,5,main]
Thread Name Thread[main,5,main]
Even though we got the lock on t,the main thread is getting executed in parallel with tr.Who owns the lock??How??