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

一、什么是线程安全?

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

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

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());

你可能感兴趣的:(《我不是Java》,多线程,安全,并发编程,java,thread)