java_线程(线程安全的类)

哪些是线程安全的类? 以及如何将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会在多线程中使用,而VectorHashtable就不太会使用,而是通过集合工具类(Collections)中的synchronizedList进行调用,将线程不安全的list变成线程安全的list【set、map都是同理】

List<String> list1 = Collections.synchronizedList(new ArrayList<String>());

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_46100517/article/details/126016003