线程安全的定义
- 多个线程访问同一个对象资源时,不会出现对当前对象资源的数据造成污染与破坏时,那么这个资源对象就是线程安全的。
验证List的非线程安全
public class ListSafeProveTwo {
public static void main(String[] args) throws Exception{
List<Integer> safe = Collections.synchronizedList(new ArrayList<>());//线程安全的List
List<Integer> unsafe = new ArrayList<>();//非线程安全的list
for (int i = 0 ; i<10 ; i++){//测试次数
safe.clear();
unsafe.clear();
prove(unsafe, safe);
}
}
public static void prove (List<Integer> unsafe , List<Integer> safe)throws Exception{
for (int i = 0 ; i < 10000 ; i++){ //开启10000个线程,同时往List里面添加数据
new Thread(new Runnable() {
@Override
public void run() {
unsafe.add(1);
safe.add(1);
}
}).start();
}
Thread.sleep(50); // 主线程休眠 , 为了给子线程足够的执行时间
System.out.println("unsafe Size : "+ unsafe.size()+" | safe Size : "+ safe.size());
}
}
网友评论