在Mybaits源碼中有一個ErrorContext,採用ThreadLocal和單例模式實現,具有線程安全性。對於開發過程中如果需要與線程同生命週期並且變量具有線程封閉的不妨可以借鑑。
關於棧封閉和線程封閉可參看:https://blog.csdn.net/chenbinkria/article/details/79887244 《如何安全的發佈一個對象》
比如我們創建一個IContext:
public class IContext {
private static final ThreadLocal<IContext> LOCAL = new ThreadLocal<IContext>();//static final保證變量更改正確的構造,同時被靜態方法調用
public static IContext instance() {
IContext context = LOCAL.get();//每一個線程get的都是自己的,不存在競爭
if (context == null) {
context = new IContext();
LOCAL.set(context);
}
return context;
}
/**
* 下面可以寫一下在這個context中想做的事
*/
//example,比如在整個線程傳遞消息
public ErrorContext message(String message) {
this.message = message;
return this;
}
}