Static synchronization is achieved by static synchronized methods. Static synchronized method locked on class and non-static synchronized method locked on current object i.e. static and non-static synchronized methods can run at same time. It can produce inconsistency problem.
If static synchronized method is called a class level lock is acquired and then if an object is tries to access non-static synchronized method at the same time it will not be accessible because class level lock is already acquired.
Example:
MultiThreadExample.java
/** * This program is used to show the multithreading * example with synchronization using static synchronized method. * @author w3schools */ class PrintTable{ public synchronized static void printTable(int n){ 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{ public void run(){ PrintTable.printTable(2); } } class MyThread2 extends Thread{ public void run(){ PrintTable.printTable(5); } } public class MultiThreadExample{ public static void main(String args[]){ //creating threads. MyThread1 t1=new MyThread1(); MyThread2 t2=new MyThread2(); //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 |
Difference between static and non-static synchronized method.
Non-Static synchronized method | Static synchronized method |
|
|
Next Topic: Synchronized block in java with example.
Previous Topic: Synchronized method in java with example.