哪些是线程安全的类? 以及如何将list、set、map等从线程不安全变成线程安全
以及如何将list、set、map等从线程不安全变成线程安全)
package com.client.aaaaaaaaaaaaaaaa;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Vector;
/**
* 线程安全的类:StringBuffer、Vector、Hashtable
* @author LunarYouI
* @create 2022-07-27 15:29
*/
public class one {
public static void main(String[] args) {
StringBuffer stringBuffer = new StringBuffer();
StringBuilder stringBuilder = new StringBuilder();
Vector<Object> objects = new Vector<>();
ArrayList<Object> list = new ArrayList<>();
Hashtable<Object, Object> objectObjectHashtable = new Hashtable<>();
HashMap<Object, Object> objectObjectHashMap = new HashMap<>();
}
}
点击StringBuffer、Vector、Hashtable类可查看出他们都是被synchronized修饰了的
StringBuffer的源码可看出来他是有synchronized,所以他是线程安全的
StringBuilder 并没有synchronized,所以说他不是线程安全的
一般来说StringBuffer会在多线程中使用,而Vector、Hashtable就不太会使用,而是通过集合工具类(Collections)中的synchronizedList进行调用,将线程不安全的list变成线程安全的list【set、map都是同理】
List<String> list1 = Collections.synchronizedList(new ArrayList<String>());