博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程-Thread、Runnable 创建线程和调用过程分析
阅读量:5098 次
发布时间:2019-06-13

本文共 1345 字,大约阅读时间需要 4 分钟。

创建线程的两种方式:

  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的有参构造函数和Thread.run()的源码

public Thread(Runnable target) {        init(null, target, "Thread-" + nextThreadNum(), 0);    }

 

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方法调用结束并不意味着对应的线程已经开始运行,这个线程可能稍后会运行,甚至永远都不会被运行。

 

转载于:https://www.cnblogs.com/wenq001/p/9118336.html

你可能感兴趣的文章
冒泡排序, 使用最低票价.---双重循环,一重移动次数.二重移动
查看>>
1go基本语法
查看>>
C与C艹的内存管理方式
查看>>
UVa401
查看>>
查看selinux的状态
查看>>
浅谈单调队列、单调栈【转载】
查看>>
[LintCode] 最小路径和
查看>>
S-GPRS车辆监控方案-转载
查看>>
Mapinfo重点及难点讲解-SQL查询
查看>>
AngularJS路由(转)
查看>>
兼容IE6-9,FF,Chrome的box-shadow效果(纯CSS)
查看>>
给互联网创业公司的8个建议
查看>>
20160115小记
查看>>
hdu 2526
查看>>
那些常用的git工具
查看>>
join()方法之我见
查看>>
希尔shell排序——java实现
查看>>
webService学习1----WSDL
查看>>
评估分类器性能的度量,像混淆矩阵、ROC、AUC等
查看>>
Scala - Spark Lambda“goesto“ => 分析
查看>>