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在第二个锁中修改了大小,但是在第一个锁中的值并没有发生变化
public class Main implements Runnable { static