/**
测试多线程并发获取唯一子增长的值
@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不同
`System.out.println("set size :" + set.size());
System.out.println("list size :" + list.size());`
这两句可没有在锁区域内,一个线程完毕后,在这两句执行的任意时刻,另一个线程可能已经开始执行,并改写了list
.
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。