方式一:Vector
public class ThreadDemo05 {
public static void main(String[] args) {
//方案一:解決list執行緒不安全的原因(因為在底層添加了sync的鎖)
Vector<String> list=new Vector<>();
// List<String> list = new ArrayList<>();
for (int i = 1; i <= 30; i++) {
new Thread(() -> {
list.add(UUID.randomUUID().toString().substring(0, 8));
System.out.println(list);
}, String.valueOf(i)).start();
}
}
}
方式二:Collections
public class ThreadDemo06 {
public static void main(String[] args) {
//方案二:解決list執行緒不安全的原因(因為在添加了sync的鎖)
// List<String> list = new ArrayList<>();
List<String> list= Collections.synchronizedList(new ArrayList<>());
for (int i = 1; i <= 30; i++) {
new Thread(() -> {
list.add(UUID.randomUUID().toString().substring(0, 8));
System.out.println(list);
}, String.valueOf(i)).start();
}
}
}
方式一和方式二比較古老
public class ThreadDemo07 {
public static void main(String[] args) {
//方案三:寫時復制技術(并發讀)
// List<String> list = new ArrayList<>();
List<String> list= new CopyOnWriteArrayList<>();
for (int i = 1; i <= 30; i++) {
new Thread(() -> {
list.add(UUID.randomUUID().toString().substring(0, 8));
System.out.println(list);
}, String.valueOf(i)).start();
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/401546.html
標籤:其他
