This section contains the detail about the Thread Synchronization in java.
Thread Synchronization
In multithreading, situations comes where two or more threads need access to a shared resource. To avoid deadlock or errors, they need some way to ensure that the resource will be used by only one thread at a time. The process by which this synchronization is achieved is called thread synchronization.
The general form of Synchronized statement :
synchronized(object) { // statements to be synchronized }
The above block is referred to as critical section. Every Java object with a critical section of code gets a lock associated with the object. To enter a critical section, a thread needs to obtain the corresponding object's lock. Here, object is a reference to the object being synchronized.
Given below the example which has a synchronized block within the run() method :
//This program uses a synchronized block. class Callme { void call(String msg) { System.out.print("[" + msg); try { Thread.sleep(1000); } catch (InterruptedException e) { System.out.println("Interrupted"); } System.out.println("]"); } } class Caller implements Runnable { String msg; Callme target; Thread t; public Caller(Callme 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 ThreadSyncDemo { public static void main(String args[]) { Callme target = new Callme(); Caller ob1 = new Caller(target, "Hello"); Caller ob2 = new Caller(target, "Synchronized"); Caller ob3 = new Caller(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 :
C:\Program Files\Java\jdk1.6.0_18\bin>java ThreadSyncDemo [Synchronized] [World] [Hello] |
[ 0 ] Comments