這8種保證線程安全的技術(shù)你都知道嗎?
無狀態(tài) 不可變 安全的發(fā)布 volatile synchronized lock cas threadlocal
一.無狀態(tài)
public class NoStatusService {public void add(String status) {System.out.println("add status:" + status);}public void update(String status) {System.out.println("update status:" + status);}}
二.不可變
public class NoChangeService {public static final String DEFAULT_NAME = "abc";public void add(String status) {System.out.println("add status:" + status);}}
三.安全的發(fā)布
public class SafePublishService {private String name;public String getName() {return name;}public void add(String status) {System.out.println("add status:" + status);}}
四.volatile
public class FlagService {public volatile boolean flag = false;public void change() {if (flag) {System.out.println("return");return;}flag = true;System.out.println("change");}}
五.synchronized
public class SyncService {private int age = 1;public synchronized void add(int i) {age = age + i;System.out.println("age:" + age);}public void update(int i) {synchronized (this) {age = age + i;System.out.println("age:" + age);}}}
六.lock
public class LockService {private ReentrantLock reentrantLock = new ReentrantLock();public int age = 1;public void add(int i) {try {reentrantLock.lock();age = age + i;System.out.println("age:" + age);} finally {reentrantLock.unlock();}}}
七.cas
public class AtomicService {private AtomicInteger atomicInteger = new AtomicInteger();public int add(int i) {return atomicInteger.getAndAdd(i);}}
八.threadlocal
public class ThreadLocalService {private ThreadLocalthreadLocal = new ThreadLocal<>(); public void add(int i) {Integer integer = threadLocal.get();threadLocal.set(integer == null ? 0 : integer + i);}}
總結(jié)
有道無術(shù),術(shù)可成;有術(shù)無道,止于術(shù)
歡迎大家關(guān)注Java之道公眾號
好文章,我在看??
評論
圖片
表情
