• ThreadLocal


    ThreadLocal

    执行ThreadLocal对象的set(Object obj)
    方法,将会向存入一个以当前线程为
    键的键值对

    执行ThreadLocal对象的get()方法,将
    会根据当前线程对象为键,取出与之
    对应的值

    Handler的post()方法。

    // private static Message getPostMessage(Runnable r){
    //        Message m = Message.obtain();
    //            m.callback = r;
    //            return m;
    //            }
    // 1,该方法完成了两个操作,第一个生成了一个Message对象,第二,将r对象赋值给Message对象的callback属性
    
    //   第一个问题,如何把一个Runnable对象放置在消息队列当中:实际上是生成了一个Message对象,并将r赋值给Message对象的callback属性
    //   然后再将Message对象放置在消息队列当中
    //   第二个问题,Looper取出了携带r对象的Message对象之后,干了些什么? 取出Message对象之后调用了dispatchMessage方法,然后判断Message的callback属性是否为空,
    //    此时的callback属性有值,所以执行了handleCallback(Message msg), 在该方法中执行了msg.callback.run();
    public class MainActivity extends Activity {
    
        private Button button;
        private Handler handler = new Handler();
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            button = (Button) findViewById(R.id.button);
            button.setOnClickListener(new OnClickListener() {
                
                @Override
                public void onClick(View v) {
                    TestThread tt = new TestThread();
                    tt.start();
                }
            });
        }
        
        class TestThread extends Thread {
            @Override
            public void run() {
                Runnable r = new Runnable() {
                    @Override
                    public void run() {
                        //这里可以写更新UI的代码。
                        String currentThreadName = Thread.currentThread().getName();
                        Log.d("MainActivity", "当前线程的名称————》" + currentThreadName);
                        
                    }
                };
                //post(r)方法将应用r对象放置在消息队列当中,Looper对象(MainThread)从消息队列当中取出了r对象
                //我们猜测:取出r对象之后
                //1.Thread t = new Thread(r);
                //2.t.start();
                //根据测试的结果可以看出,该思路是错误的
                //我们的问题是Looper取出了r对象之后,干了些什么?
                handler.post(r);
            }
        }
    }
  • 相关阅读:
    一道《编程之美》第一章的无解题引发的“血案”
    MapReduce实例2(自定义compare、partition)& shuffle机制
    MapReduce实例&YARN框架
    HDFS下载数据机制的底层分析
    在windows下的hdfs客户端编写
    C语言-第2次作业得分
    第2次作业得分-东师软工
    第1次作业得分-东师软工
    第3次作业-四则运算(结对作业)
    第2次作业-效能分析
  • 原文地址:https://www.cnblogs.com/wuyong0818/p/4803904.html
Copyright © 2020-2023  润新知