java,重入锁的变量值不变

public class Main   implements Runnable {
    static Main instance=new Main();
    static int i=0;
    static int k=3;//把k改成3
    @Override
    public void run() {
        for(int j=0;j<10;j++){
            System.out.println(j +"   aaaaaa");
            //this,当前实例对象锁
            synchronized(this){
                i++;
                System.out.println(j +"   bbbbbb");
                increase(j);//synchronized的可重入性

            }
        }
    }
    public synchronized void increase(int j){//这里传入j
        j++;
        j++;
        System.out.println(j +"   cccccc");
    }
    public static void main(String[] args) {
        Thread t1=new Thread(instance);
        t1.start();
        try {
            t1.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(i);
    }
}

//0   aaaaaa
//0   bbbbbb
//2   cccccc
//1   aaaaaa
//1   bbbbbb
//3   cccccc
//2   aaaaaa
//2   bbbbbb
//4   cccccc
//3   aaaaaa
//3   bbbbbb
//5   cccccc
//4   aaaaaa
//4   bbbbbb
//6   cccccc
//5   aaaaaa
//5   bbbbbb
//7   cccccc
//6   aaaaaa
//6   bbbbbb
//8   cccccc
//7   aaaaaa
//7   bbbbbb
//9   cccccc
//8   aaaaaa
//8   bbbbbb
//10   cccccc
//9   aaaaaa
//9   bbbbbb
//11   cccccc
//10


虽然j在第二个锁中修改了大小,但是在第一个锁中的值并没有发生变化

你可能感兴趣的:(java,不变,变量值,重入锁)