工具类 静态方法 线程安全
一般来说,工具类都是静态方法,只要静态方法内不引用可更改状态的静态字段就是线程安全的。因为每次调用都会分配新的栈空间。
但,若传入的是引用类型变量,而且如果同一个对象可能同时传入给2个可更改其状态的静态方法,就会存在线程安全问题。
根本还是要清楚,静态方法内是否含有状态可更改的共享资源。
public class MyThread implements Runnable { StringBuilder sb; String signal; public void run() { T(sb,signal); } public MyThread(StringBuilder stringBuilder,String signal){ this.sb=stringBuilder; this.signal=signal; } public static void T(StringBuilder stringBuilder,String signal){ for(int i=0;i<10;i++){ stringBuilder.append(signal); System.out.println(stringBuilder); } } }
如上代码,线程安全的隐患就是传入的StrinbBuilder是否是同一对象,若非,则线程安全。