Synchronization
in Java
Synchronization
in Java is the capability to control the access of multiple threads to any
shared resource. It is a technique through which we can control multiple
threads or among no of threads only one thread will enter the synchronized
area.
Example 01:
package com.java.Multi_threading;
// A Sender class
class Sender
{
public void SenderMsg(String msg)
{
System.out.println("\nSending a Message: " + msg);
try
{
Thread.sleep(800);
}
catch (Exception e)
{
System.out.println("Thread interrupted.");
}
System.out.println("\n" +msg+ "Sent");
}
}
// A Sender class for sending a message using Threads
class SenderWThreads extends Thread
{
private String msg;
Sender sd;
// Receiver method to receive a message object and a message to be sent
SenderWThreads(String m, Sender obj)
{
msg = m;
sd = obj;
}
public void run()
{
// Checks that only one thread sends a message at a time.
synchronized(sd)
{
// synchronizing the sender object
sd.SenderMsg(msg);
}
}
}
// Driver Code
public class ShynchronizedMultithreading
{
public static void main(String args[])
{
Sender sender = new Sender();
SenderWThreads sender1 = new SenderWThreads( "Hola " , sender);
SenderWThreads sender2 = new SenderWThreads( "Welcome to Programming ", sender);
// Start two threads of SenderWThreads type
sender1.start();
sender2.start();
// wait for threads to end
try
{
sender1.join();
sender2.join();
}
catch(Exception e)
{
System.out.println("Interrupted");
}
}
}
Synchronized
Block in Java
Synchronized
block can be used to perform synchronization on any specific resource of the
method.
Example 02:
package com.java.Multi_threading;
//example of java synchronized method
class Tables{
synchronized void printTable(int n){//synchronized method
for(int i=1;i<=5;i++){
System.out.println(n*i);
try{
Thread.sleep(400);
}catch(Exception e){System.out.println(e);}
}
}
}
class MyThreads_1 extends Thread{
Tables t;
MyThreads_1(Tables t){
this.t=t;
}
public void run(){
t.printTable(5);
}
}
class MyThreads_2 extends Thread{
Tables t;
MyThreads_2(Tables t){
this.t=t;
}
public void run(){
t.printTable(100);
}
}
public class TestSynchronization2{
public static void main(String args[]){
Table obj = new Table();//only one object
MyThread1 t1=new MyThread1(obj);
MyThread2 t2=new MyThread2(obj);
t1.start();
t2.start();
}
}
0 Comments