这里我定义了一个StaticData类,实现Runnable方法,为了同步,将data设置锁
class StaticData implements Runnable { Integer data=0; @Override public void run() { // TODO Auto-generated method stub synchronized(data) { try { int k=data+1; Thread.sleep(10); data=k; } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(data); } }
在main方法中:
StaticData sd=new StaticData(); System.out.println("Starting.."); for(int i=0;i<=99;i++) { Thread thread=new Thread(sd); thread.start(); System.out.println("Ended");
最终只输到了77;
我将
synchronized(data)
改为
synchronized(this)
结果显示到了100
为什么我这里锁定data不行呢?
解决了,这里是拆箱的问题,data被拆箱了。