美文网首页Java自学
Java自学-多线程 线程安全的类

Java自学-多线程 线程安全的类

作者: Wester西人 | 来源:发表于2020-02-28 10:26 被阅读0次

Java常见的线程安全相关的面试题

步骤 1 : HashMap和Hashtable的区别

HashMap和Hashtable都实现了Map接口,都是键值对保存数据的方式
区别1:
HashMap可以存放 null
Hashtable不能存放null
区别2:
HashMap不是线程安全的类
Hashtable是线程安全的类

HashMap和Hashtable的区别
步骤 2 : StringBuffer和StringBuilder的区别

StringBuffer 是线程安全的
StringBuilder 是非线程安全的

所以当进行大量字符串拼接操作的时候,如果是单线程就用StringBuilder会更快些,如果是多线程,就需要用StringBuffer 保证数据的安全性

非线程安全的为什么会比线程安全的 快? 因为不需要同步嘛,省略了些时间

StringBuffer和StringBuilder的区别
步骤 3 : ArrayList和Vector的区别

通过在eclipse中查看源代码可以得知:

ArrayList类的声明:

public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable

Vector类的声明:

public class Vector<E>    extends AbstractList<E>
    implements List<E>, RandomAccess, Cloneable, java.io.Serializable

一模一样的~
他们的区别也在于,Vector是线程安全的类,而ArrayList是非线程安全的。

步骤 4 : 把非线程安全的集合转换为线程安全

ArrayList是非线程安全的,换句话说,多个线程可以同时进入一个ArrayList对象的add方法

借助Collections.synchronizedList,可以把ArrayList转换为线程安全的List。

与此类似的,还有HashSet,LinkedList,HashMap等等非线程安全的类,都通过工具类Collections转换为线程安全的

package multiplethread;
 
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
 
public class TestThread {
    
    public static void main(String[] args) {
        List<Integer> list1 = new ArrayList<>();
        List<Integer> list2 = Collections.synchronizedList(list1);
    }
        
}

相关文章

  • ConcurrentHashMap

    总结 HashMap在多线程中不安全,java提供了线程安全的ConcurrentHashMap 类,保证在多线程...

  • Java自学-多线程 线程安全的类

    Java常见的线程安全相关的面试题 步骤 1 : HashMap和Hashtable的区别 HashMap和Has...

  • Java多线程目录

    Java多线程目录 Java多线程1 线程基础Java多线程2 多个线程之间共享数据Java多线程3 原子性操作类...

  • 12 并发安全

    1 类的线程安全定义。怎么才能做到类的线程安全? 类的线程安全定义如果多线程下使用这个类,不过多线程如何使用和调度...

  • 后端架构师技术图谱(三)-并发、锁、设计模式(二)

    并发 多线程 《40个Java多线程问题总结》 线程安全 《Java并发编程——线程安全及解决机制简介》 一致性、...

  • 集合类与Java锁浅析

    集合类不安全问题 List ArrayList不是线程安全类,在多线程同时写的情况下,会抛出java.util.C...

  • Java 多线程编程

    线程安全 如果一个类在单线程环境下正常运行,在多线程环境下也能正常运行,则称为线程安全。Java类库中的Array...

  • Java 多线程知识点

    Java多线程并发 一、 java多线程创建方式 继承Tread类将自己的类继承Tread类,并重写run()方法...

  • java线程&和各种奇奇怪怪的锁

    1、Java线程 一、Java多线程常用的两种实现方法 1、 继承Thread类 子类继承Thread类具备多线程...

  • Notes: Java下的线程安全容器小小整理

    Java下的线程安全容器 在编写多线程的Java程序时,难免会使用到各种各样的容器。Java本身提供了许多线程安全...

网友评论

    本文标题:Java自学-多线程 线程安全的类

    本文链接:https://www.haomeiwen.com/subject/vvekhhtx.html