首页 新闻 会员 周边

java 同步synchronized

0
悬赏园豆:10 [已关闭问题] 关闭于 2015-04-07 10:40

这里我定义了一个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不行呢?

mcfer的主页 mcfer | 初学一级 | 园豆:144
提问于:2015-04-07 10:28
< >
分享
所有回答(1)
0

解决了,这里是拆箱的问题,data被拆箱了。

mcfer | 园豆:144 (初学一级) | 2015-04-07 10:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册