Android线程:Thread

说到线程,第一个想到的肯定是Thread了,而Thread是一个实现了Runnable接口的类而已。下面我们一起来看一下:

Runnable
@FunctionalInterface
public interface Runnable {
    public abstract void run();
}

Runnable是一个只有 run() 方法的接口。

Thread
Android线程:Thread_第1张图片
Thread 构造方法

Thread 中的构造方法中,我们常用到的是前四个

  1. public Thread();
  2. public Thread(Runnable target);
  3. public Thread(String name);
  4. public Thread(Runnable target, String name);

其中,target参数表示创建线程时传递的哪个Runnable对象,那么这个线程开启后执行的就是该Runnable的run()方法。name参数可以手动来指定创建的线程的名称,如果不指定,则默认是Thread-序号的形式,具体数值由nextThreadNum()方法来计数确定。
无论我们调用的是哪个构造函数,内部最终都调用了private void init(ThreadGroup g, Runnable target, String name, long stackSize)方法。

private void init(ThreadGroup g, Runnable target, String name, long stackSize) {

        ··· 省略代码 ···

        this.target = target;  // 把传递进来的Runnable对象保存下来

        ··· 省略代码 ···

    }
public void run() {
        if (target != null) {
            target.run();  // target不为空,则调用其run()方法
        }
    }

最后我们通过Thread类中的 start() 方法来启动我们创建的线程

public synchronized void start() {

        ··· 省略代码 ···

        started = false;
        try {
            nativeCreate(this, stackSize, daemon);  // 通过本地方法完成线程的启动
            started = true;
        } finally {
           ··· 省略代码 ···
        }
    }

最终通过本地方法来完成线程的创建和启动。

private native static void nativeCreate(Thread t, long stackSize, boolean daemon);

创建线程时,我们把需要并行处理的代码放在 run() 方法中,通过 start() 方法启动线程将自动调用 run() 方法,这是由 jvm 的内存机制规定的。并且run()方法必须是public访问权限,返回值类型为void。

Thread中常用方法:
  • start();//启动线程
  • getId();//获得线程ID
  • getName();//获得线程名字
  • getPriority();//获得优先权
  • isAlive();//判断线程是否活动
  • isDaemon();//判断是否守护线程
  • getState();//获得线程状态
  • sleep(long mill);//休眠线程
  • join();//等待线程结束
  • yield();//放弃cpu使用权利
  • interrupt();//中断线程
  • currentThread();//获得正在执行的线程对象

你可能感兴趣的:(Android线程:Thread)