新建一个线程一般有两个方法,一个是新建一个类,继承自Thread,里面重写run;另一个是新建一个Thread对象,new Thread的时候传入一个Runnable参数,其中Runnable需要重写run。
为什么需要定一个类去实现Runnable接口呢?继承Thread类和实现Runnable接口有啥区别呢?
实现Runnable接口,避免了继承Thread类的单继承局限性。覆盖Runnable接口中的run方法,将线程任务代码定义到run方法中。
创建Thread类的对象,只有创建Thread类的对象才可以创建线程。线程任务已被封装到Runnable接口的run方法中,而这个run方法所属于Runnable接口的子类对象,所以将这个子类对象作为参数传递给Thread的构造函数,这样,线程对象创建时就可以明确要运行的线程的任务。
//创建线程执行目标类对象
Runnable runn = new MyRunnable();
//将Runnable接口的子类对象作为参数传递给Thread类的构造函数
Thread thread = new Thread(runn);
Thread thread2 = new Thread(runn);
//开启线程
thread.start();
thread2.start();
我们需要知道的是在主线程中new 一个新的runnable,里面覆盖的run方法仍然在主线程中运行,loop仍然为UiLoop,新建一个Thread,线程为一个新的线程,loop为null,如果需要子线程中的loop,需要新建一个looper.prepear()