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

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

    评论

报告相同问题?

悬赏问题

  • ¥30 求解达问题(有红包)
  • ¥15 请解包一个pak文件
  • ¥15 不同系统编译兼容问题
  • ¥100 三相直流充电模块对数字电源芯片在物理上它必须具备哪些功能和性能?
  • ¥30 数字电源对DSP芯片的具体要求
  • ¥20 antv g6 折线边如何变为钝角
  • ¥30 如何在Matlab或Python中 设置饼图的高度
  • ¥15 nginx中的CORS策略应该如何配置
  • ¥30 信号与系统实验:采样定理分析
  • ¥100 我想找人帮我写Python 的股票分析代码,有意请加mathtao