多线程-Thread、Runnable 创建线程和分析

创建线程的两种方式:

  1:创建Thread类的子类 ---基于继承的技术 。

  2:以Runnable接口实例为构造参数直接通过new  创建 Thread 实例。---基于组合的技术。

public class ThreadOne extends  Thread {
    @Override
    public void run() {
        System.out.println( Thread.currentThread().getName());
    }
}

public class ThreadTwo implements Runnable{
    @Override
    public void run() {
        System.out.println("runnable Thread:"+Thread.currentThread().getName());
    }
}

public class ThreadTest {
    public static void main(String[] args) {
        ThreadOne thread1 = new ThreadOne();
        thread1.start();
        Thread thread = new Thread(new ThreadTwo());
        thread.start();
    }
}

无论是实现runnable 接口,还是继承Thread实例实现多线程,run方法都是线程的任务处理逻辑的入口,它由java虚拟机在运行相应线程直接调用,而不需要代码进行调用。

跟进Thread.run()的源码

    public void run() {
        if (target != null) {
            target.run();
        }
    }

得知,如果target不null,则调用target.run(),否则什么也不做;其中实例变量target 的类型为 Runnable, 如果实例线程是通过构造器Thread(Runnable target)创建的,那么target为构造器的参数值,则执行Runable 实例的run方法,否则,如果是通过Thread的的子类创建的线程对象,子类必须重新run()方法,否则父类Thread什么也不处理。上面就是线程调用run方法的过程。

Thread 类的start 方法的作用是启动相应的线程,启动一个线程的实质是请求java虚拟机运行相应的线程,而这个线程具体何时能够运行是由线程调度器(Scheduler)决定的,所以,start方法调用结束并不意味着对应的线程已经开始运行,这个线程可能稍后会运行,甚至永远都不会被运行。

猜你喜欢

转载自www.cnblogs.com/wenq001/p/9118336.html