在分析handler 源码时候发现保存looper 对象时候使用 一个叫做threadlocal 的类:
当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。
举例:
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private ActivityMainBinding mainBinding;
public String titleString;
private ThreadLocal<Object> booleanThreadLocal;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mainBinding=DataBindingUtil.setContentView(this, R.layout.activity_main);
titleString="test button";
mainBinding.setVariable(BR.data, this);
}
private void msg(String msg){
Log.i("mytool", msg);
}
@Override
public void onClick(View view) {
//test logic
booleanThreadLocal=new ThreadLocal<>();
booleanThreadLocal.set(true);
msg("main thead=="+booleanThreadLocal.get());
new Thread(new Runnable() {
@Override
public void run() {
booleanThreadLocal.set(false);
msg("thread #1 thead=="+booleanThreadLocal.get());
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
msg("thread #2 thead=="+booleanThreadLocal.get());
}
}).start();
}
}
输出结果:
08-02 13:31:24.366 22897-22897/com.forcedome.liyihang.cashierjumpactivity I/mytool: main thead==true
08-02 13:31:24.369 22897-22970/com.forcedome.liyihang.cashierjumpactivity I/mytool: thread #1 thead==false
08-02 13:31:24.370 22897-22971/com.forcedome.liyihang.cashierjumpactivity I/mytool: thread #2 thead==null