This is to avoid Java’s multiple inheritance problems which will make it difficult to inherit another class with Thread.Below are some key points about Thread Local variables Thread Local variable are difficult to understand and I recommend you to use best java book on concurrency: Java Concurrency in Practice This exception is thrown when you try to call wait()/notify()/notify All() any of these methods for an Object from a point in your program where u are NOT having a lock on that object.(i.e.Below is the example which demonstrates this, The Common class has two methods synchronized Method1() and method1() My Thread class is calling both the methods in separate threads, This shows that method1() - is called even though the synchronized Method1() was in execution. If an object has synchronized instance methods then the Object itself is used a lock object for controlling the synchronization.Therefore all other instance methods need to wait until previous method call is completed.This is unlike instance methods, as multiple threads can access "same synchronized instance methods" at the same time for different instances.Yes, a Non-synchronized method can always be called without any problem.
A Java thread could be implemented by using Runnable interface or by extending the Thread class.
Multi-threading and thread optimization is a common topic in java performance tuning books as well.
This post is a collection of some good questions on Java threads, which can be asked to a senior java developer.
u r not executing any synchronized block/method of that object and still trying to call wait()/notify()/notify All()) wait(), notify() and notify All() all throw Illegal Monitor State Exception.
since This exception is a subclass of Runtime Exception so we r not bound to catch it (although u may if u want to).