Loading

代码

  •   public synchronized void setPlus(){
          amount++;
      }
      
      public  void setPlus(){
          synchronized(this){
              amount++;
          }
      }
    
  • synchronized同步代码块

    • 对于较大的临界区代码段,为了执行效率,最好将同步方法分为小的临界区代码段。

    • //一旦线程进入,当线程在操作sum1而没有操作sum2时,其他线程由于没有进入临界区,只能看着sum2被闲置
      public class TwoPlus{
          private int sum1=0;
          private int sum2=0;
          //同步方法
          public synchronized void plus(int val1,int val2){
              //临界区代码段
              this.sum1+=val1;
              this.sum2+=val2;
          }
      }
      
      
      //进行吞吐量的提升改造
      public class TwoPlus{
          private int sum1=0;
          private int sum2=0;
          private Integer sum1Lock=new Interger(1);//同步锁1
          private Integer sum2Lock=new Interger(2);//同步锁2
      
          public void plus(int val1,int val2){
              //同步块1
              synchronized(this.sum1Lock){
                   this.sum1+=val1;
      
              }
              //同步块2
               synchronized(this.sum2Lock){
                   this.sum2+=val2;
      
              }
          }
      }
      
posted @ 2022-01-26 11:06  Mars_pig  阅读(224)  评论(0)    收藏  举报