《我不懂并发》你为什么还不懂线程安全?

    技术2022-07-13  73

    一、什么是线程安全?

    代码在多线程下执行和在单线程下执行都能获得一样的结果。

    例子:以下程序是线程安全的吗?

    public class RunnableImpl implements Runnable{ private int numbers= 100; @Override public void run() { while(true){ if(numbers>0){ try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } numbers--; } } } }

    二、解决线程安全的一般手段

    锁 (synchronized、volatile、Lock)队列(并发包中提供的Atomic原子类)

    二、Java中那些类或者集合是线程安全的?

    类:String、Integer、Long、StringBuffer、Properties。 集合:vector、statck、hashtable、enumeration。

    考点:

    stringBuffer是线程安全,而stringBuilder是线程不安全的。hashtable是线程安全的(同步机制);hashmap不是线程安全的,hashtable不允许插入空值,hashmap允许

    三、绝对线程安全的类(list、set) CopyOnWriteArrayList、CopyOnWriteArraySet(深入理解需要查看源代码)

    考点:写一个线程安全的List List list = Collections.synchronizedList(new ArrayList());

    Processed: 0.044, SQL: 9