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

    评论

报告相同问题?

悬赏问题

  • ¥15 代码的修改,添加和运行完善
  • ¥15 krpano-场景分组和自定义地图分组
  • ¥15 lammps Gpu加速出错
  • ¥15 关于PLUS模型中kapaa值的问题
  • ¥15 关于博途V17进行仿真时无法建立连接问题
  • ¥15 机器学习教材中的例题询问
  • ¥15 求.net core 几款免费的pdf编辑器
  • ¥15 为什么安装HCL 和virtualbox之后没有找到VirtualBoxHost-OnlyNetWork?
  • ¥15 C# P/Invoke的效率问题
  • ¥20 thinkphp适配人大金仓问题