为了账号安全,请及时绑定邮箱和手机立即绑定

想问下方法内部定义锁和方法块不生效的原因是?

-------------------synchronized不生效---------------
public class tx implements Runnable{
static Integer  a=new Integer(0);
    static  int  i=0;
public void increase(){
    Integer integer = new Integer(0);
    synchronized(integer){
    i++;}
}
@Override
public void run(){
    for (int j =0 ; j<10000;j++){
        increase();
    }
}

public static void main(String[] args) throws InterruptedException {
    tx tx = new tx();
    Thread t1 = new Thread(tx);
    Thread t2 = new Thread(tx);
    t1.start();
    t2.start();
    t1.join();
    t2.join();
    System.out.println(i);
}
----------------分割线(synchronized生效)---------------------
public class tx implements Runnable{
static Integer  a=new Integer(0);
    static  int  i=0;
     Integer integer = new Integer(0);---》放入increase方法内定义不生效
public void increase(){ 
    synchronized(integer){
    i++;}
}
@Override
public void run(){
    for (int j =0 ; j<10000;j++){
        increase();
    }
}

public static void main(String[] args) throws InterruptedException {
    tx tx = new tx();
    Thread t1 = new Thread(tx);
    Thread t2 = new Thread(tx);
    t1.start();
    t2.start();
    t1.join();
    t2.join();
    System.out.println(i);
}


正在回答

2 回答

两个线程使用的是两个不同的锁,线程之间没有相互影响。

0 回复 有任何疑惑可以回复我~
public void increase(){
    Integer integer = new Integer(0);
    synchronized(integer){
    i++;}
}
@Override
public void run(){
    for (int j =0 ; j<10000;j++){
        increase();
    }
}

这样写每次执行run方法锁都不一样。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

想问下方法内部定义锁和方法块不生效的原因是?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信