Synchronized block in java

Synchronized block:

Synchronized block is used to synchronize a critical block of code instead of whole method.
Note: Synchronized block is preferred over synchronized method because in case synchronized block only critical block of code is locked not whole method, hence performance will be better in this case.
Throw NullPointerException if object passed in synchronized block is null.

Example:

MultiThreadExample.java

/**
 * This program is used to show the multithreading 
 * example with synchronization using synchronized block.
 * @author w3schools
 */
class PrintTable{    
    public void printTable(int n){
       synchronized(this){
    	   System.out.println("Table of " + n);
           for(int i=1;i<=10;i++){
               System.out.println(n*i);  
               try{  
            	 Thread.sleep(500);  
               }catch(Exception e){
            	 System.out.println(e);
               }  
            } 
       }            
    }  
}  
 
class MyThread1 extends Thread{  
    PrintTable pt;  
    MyThread1(PrintTable pt){  
    	this.pt=pt;  
    }  
    public void run(){ 
    	pt.printTable(2);  
    }        
}  
 
class MyThread2 extends Thread{  
	PrintTable pt;  
	MyThread2(PrintTable pt){  
		this.pt=pt;  
	}  
	public void run(){  
		pt.printTable(5);  
	}  
}  
 
public class MultiThreadExample{  
    public static void main(String args[]){
    	//creating PrintTable object.
    	PrintTable obj = new PrintTable();  
 
    	//creating threads.
	    MyThread1 t1=new MyThread1(obj);  
	    MyThread2 t2=new MyThread2(obj);  
 
	    //start threads.
	    t1.start();  
	    t2.start();  
    }  
}

Output:

Table of 2
2
4
6
8
10
12
14
16
18
20
Table of 5
5
10
15
20
25
30
35
40
45
50

Download this example.

Difference between synchronized method and synchronized block.

            Synchronized method             Synchronized block
  1. Lock is acquired on whole method.
  2. Less preferred.
  3. Performance will be less as compared to synchronized block.
  1. Lock is acquired on critical block of code only.
  2. preferred.
  3. Performance will be better as compared to synchronized method.

 
Next Topic: Input output (I/O) in java.
Previous Topic: Static synchronization in java with example.