mazi2004 2015-09-14 08:01 采纳率: 0%
浏览 3240
已结题

java 多线程方法加锁获取自增变量重复问题

/**

  • 测试多线程并发获取唯一子增长的值
  • @author Administrator
    *
    */
    public class BB {
    private int increment = 0;

    final static Set set = new HashSet();
    final static List list = new ArrayList();
    public synchronized int getauto() {
    return increment++;
    }
    public static void main(String[] args) throws Exception {
    final BB b = new BB();
    Vector workers = new Vector();
    for (int i = 0; i < 2; i++) {
    final Thread t = new Thread(new Runnable() {

            @Override
            public void run() {
                synchronized (this) {
                    for (int j = 0; j < 10000; j++) {
                        int num = b.getauto();
                        System.out.println(String.valueOf(num));
                        set.add(num);
                        list.add(num);
                    }
                }
    
            }
        });
        workers.add(t);
        t.setName("thread-" + i);
        t.start();
    }
    for (Thread t : workers) {
        t.join();
    }
    System.out.println("set  size :" + set.size());
    System.out.println("list  size :" + list.size());
    

    }
    }
    list和set的size不同

  • 写回答

5条回答 默认 最新

  • bdmh 移动开发领域优质创作者 2015-09-14 08:04
    关注

    System.out.println("set size :" + set.size());
    System.out.println("list size :" + list.size());
    这两句可没有在锁区域内,一个线程完毕后,在这两句执行的任意时刻,另一个线程可能已经开始执行,并改写了list

    评论

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大