代码
-
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; } } }
-

浙公网安备 33010602011771号