Java中的线程同步块

同步块可用于对方法的任何特定资源执行同步。
假设你的方法中有50行代码, 但是你只想同步5行, 则可以使用synced块。
【Java中的线程同步块】如果将方法的所有代码放入同步块中, 它将与同步方法相同。
同步块要记住的要点

  • 同步块用于锁定任何共享资源的对象。
  • 同步块的范围小于该方法。
使用同步块的语法
synchronized (object reference expression) { //code block }

同步块示例
让我们看一下同步块的简单示例。
同步块程序
class Table{ void printTable(int n){ synchronized(this){//synchronized block for(int i=1; i< =5; i++){ System.out.println(n*i); try{ Thread.sleep(400); }catch(Exception e){System.out.println(e); } } } }//end of the method }class MyThread1 extends Thread{ Table t; MyThread1(Table t){ this.t=t; } public void run(){ t.printTable(5); }} class MyThread2 extends Thread{ Table t; MyThread2(Table t){ this.t=t; } public void run(){ t.printTable(100); } }public class TestSynchronizedBlock1{ 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(); } }

立即测试
Output:5 10 15 20 25 100 200 300 400 500

使用匿名类的同步块的相同示例:
//使用匿名类编写同步块程序
class Table{void printTable(int n){ synchronized(this){//synchronized block for(int i=1; i< =5; i++){ System.out.println(n*i); try{ Thread.sleep(400); }catch(Exception e){System.out.println(e); } } } }//end of the method }public class TestSynchronizedBlock2{ public static void main(String args[]){ final Table obj = new Table(); //only one objectThread t1=new Thread(){ public void run(){ obj.printTable(5); } }; Thread t2=new Thread(){ public void run(){ obj.printTable(100); } }; t1.start(); t2.start(); } }

立即测试
Output:5 10 15 20 25 100 200 300 400 500

    推荐阅读