Android开发中Thread线程的基本使用(总结)

  • 线程:比进程更小的执行单元,每个进程可能有多条线程,线程需要放在一个进程中才能执行,线程由程序负责管理,而进程则由系统进行调度!
  • 多线程的理解并行执行多个条指令,将CPU时间片按照调度算法分配给各个线程,实际上是分时执行的,只是这个切换的时间很短,用户感觉到"同时"而已!

线程的生命周期:(下图借于code_pig大神,总结的很好,大家一起学习)

创建线程的三种方式:

  1. 继承Thread类:新建一个类继承Tread,然后在相应的位置调用即可。
  2. 实现Runnable接口:在相应的Activity中实现相应的接口,即implements  Runnable。
  3. 使用匿名方法类:当更多的时候我们喜欢使用匿名类,即下面这种写法:
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            tvThreadResult.setText("线程执行结果:第一种线程结果!");
        }
    }).start();

MainActivity.java的主要代码如下:

package com.deepreality.threaddemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements Runnable {

    private Button btnThreadStart;
    private TextView tvThreadResult;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnThreadStart = findViewById(R.id.main_btnThreadStart);
        tvThreadResult = findViewById(R.id.main_tvThreadResult);

        btnThreadStart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //第一种线程
                //firstKindOfThread();

                //第二种线程
                MySecondThread mySecondThread = new MySecondThread();
                mySecondThread.start();


            }
        });

        //第三种线程
        new Thread(this).start();
    }

    //第一种线程
    private void firstKindOfThread() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                tvThreadResult.setText("线程执行结果:第一种线程结果!");
            }
        }).start();
    }

    @Override
    public void run() {
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        tvThreadResult.setText("线程执行结果:第三种线程结果!");
    }
}

猜你喜欢

转载自blog.csdn.net/lpcrazyboy/article/details/80853002
今日推荐