synchronized
blocks used to take a lock on object, where as static synchronized
blocks are used to take a lock on class.
Syntax
synchronized
( ClassName.class ) {
//
body
}
Example
class ClassLockEx implements Runnable{ static void printMethod(){ synchronized(ClassLockEx.class){ for(int i=0; i < 5; i++){ try{ Thread.currentThread().sleep(1000); } catch(Exception e){ System.out.println(e); } System.out.println(Thread.currentThread().getName() + " " + i); } } } public void run(){ printMethod(); } public static void main(String args[])throws Exception{ ClassLockEx obj1 = new ClassLockEx(); ClassLockEx obj2 = new ClassLockEx(); Thread t1 = new Thread(obj1); Thread t2 = new Thread(obj2); t1.start(); t2.start(); } }
Output
Thread-0 0 Thread-0 1 Thread-0 2 Thread-0 3 Thread-0 4 Thread-1 0 Thread-1 1 Thread-1 2 Thread-1 3 Thread-1 4
No comments:
Post a Comment