📜  Java同步-同步块示例

📅  最后修改于: 2020-09-27 01:35:31             🧑  作者: Mango

Java中的同步块

同步块可用于对方法的任何特定资源执行同步。

假设您的方法中有50行代码,但是您只想同步5行,则可以使用synced块。

如果将方法的所有代码放入同步块中,它将与同步方法相同。

同步块要记住的要点

  • 同步块用于锁定任何共享资源的对象。
  • 同步块的范围小于该方法。

 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 object

Thread 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