In this section, you will learn Thread Synchronization in Java
Thread Synchronization in Java
Sometimes, when two or more threads need shared resource, they need a proper mechanism to ensure that the resource will be used by only one thread at a time.
The mechanism we use to achieve this is known as thread synchronization.
The thread synchronization is achieved through the synchronized keyword. The statements which need to be synchronized should put into the synchronized block It is also known as critical section. The synchronized block is defined as follows :
synchronized(object) { // statements to be synchronized }
Object in Java which have synchronization block(critical section) gets a lock related with the object. To get access to the critical section or synchronization block you need the associated object's lock.
EXAMPLE
Given below the example using a synchronized block having thread synchronization :
class Print { void call(String msg) { System.out.print("[" + msg); try { Thread.sleep(1000); } catch (InterruptedException e) { System.out.println("Interrupted"); } System.out.println("]"); } } class PrintCaller implements Runnable { String msg; Print target; Thread t; public PrintCaller(Print targ, String s) { target = targ; msg = s; t = new Thread(this); t.start(); } // synchronize calls to call() public void run() { synchronized (target) { // synchronized block target.call(msg); } } } public class TreadSynchroniztion { public static void main(String args[]) { Print target = new Print(); PrintCaller ob1 = new PrintCaller(target, "Hello"); PrintCaller ob2 = new PrintCaller(target, "Synchronized"); PrintCaller ob3 = new PrintCaller(target, "World"); // wait for threads to end try { ob1.t.join(); ob2.t.join(); ob3.t.join(); } catch (InterruptedException e) { System.out.println("Interrupted"); } } }
OUTPUT :
[Hello] [World] [Synchronized] |