【Android】java 线程中的run和start神奇使用

   社会我远哥,人狠话不多!先上代码

1.首先声明 一个super简单的handler
    
private Handler mHandler = new Handler(Looper.getMainLooper()) {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            System.out.println("msg====" + msg.what);
        }
    };
2.声明一个Thread线程   
 private Thread mTestThread = new Thread() {
            @Override
            public void run() {
                String name1 = Thread.currentThread().getName();
                super.run();
                String name = getName();
                System.out.println("name====" + name + ",name1=" + name1);
                for (int i = 0; i < 5; i++) {
                    mHandler.sendEmptyMessage(i);
                    System.out.println("i====" + i);
                    try {
                        sleep(500);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };
3.main方法中调用这个线程(注意方法两个步骤)
    
        public void main(String [] args){
            mTestThread.run();
    //      mTestThread.start();
        }

4.当运行start()方法时 输出:

System.out: name====Thread-55,name1=Thread-55
System.out: i====0
System.out: msg====0                                                 
System.out: i====1
System.out: msg====1
System.out: i====2
System.out: msg====2
System.out: i====3
System.out: msg====3
System.out: i====4
System.out: msg====4

5.当运行run();-->见证奇迹的时刻:

System.out: name====Thread-59,name1=main
System.out: i====0
System.out: i====1
System.out: i====2
System.out: i====3
System.out: i====4
System.out: msg====0
System.out: msg====1
System.out: msg====2
System.out: msg====3
System.out: msg====4

6.原因分析:

在run运行的时候,for循环还是在main线程中运行,(main线程)handler将所有消息添加到消息队列中,for循环执行完毕时,统一处理MessageQueue(消息队列)中的消息

在运行start的时候,for循环在子线程中运行,(子线程)handler每发送一条消息,主线程中handler处理一条消息。循环打印(主线程修改UI);

7.看官老爷面试的时候是不是可以拿出来吓唬人呢

猜你喜欢

转载自blog.csdn.net/guojiayuan002/article/details/79919826