2.java线程-thread vs runnable
来源:互联网 发布:网络少年图片 编辑:程序博客网 时间:2024/06/05 16:39
jdk源码笔记,备忘
1.开启一个线程中间到底发生了什么
class MyThread extends Thread{ public void run(){ } public static void main(String[] args) { MyThread t1=new MyThread(); t1.start();}};
1.调用父类Thread的构造函数,其中init方法比较重要
其中的线程的tid和线程的名称都是使用的内存加锁自增
private static synchronized long nextThreadID() { return ++threadSeqNumber; }2.t1.start(),调用的是父类的start()方法
public synchronized void start() { if (threadStatus != 0) throw new IllegalThreadStateException(); group.add(this); boolean started = false; try { start0(); started = true; } finally { try { if (!started) { group.threadStartFailed(this); } } catch (Throwable ignore) { /* do nothing. If start0 threw a Throwable then it will be passed up the call stack */ } } }threadStatus 就是上节课描述的状态,默认是0,只能调用一次,再次调用就不是0了,所以报错,因为线程只能启动一次start0() 真正的启动线程,是一个native方法线程启动完成后,jvm底层会调用我们MyThread的重新的run方法,这是一个线程的大致过程3.假如我们调用t1.run();会发生什么呢会发生方法调用,因为我们重写了父类Thread的run方法,并且可以多次调用,如下
@Override public void run() { if (target != null) { target.run(); } }
4.MyThread extends Thread 有一个缺点,因为java单继承,那假如我们有一个类并且有父类,那如何办呢?这个时候就出现了runnable这个接口,博主认为runnable是解决这个问题实现的,并不是用来替代Thread的
下面 就来看看runnable如何解决这个问题。
new Thread(我们自己的runnable子类).start();
public Thread(Runnable target) { init(null, target, "Thread-" + nextThreadNum(), 0); }target就是我们传进来的子类的实例start(),调用的是Thread的start()方法,同继承Thread一样
不一样的是回调方法:回调的是Thread的run方法,target就是我们传进来的runnable子类,然后执行子类的run方法
@Override public void run() { if (target != null) { target.run(); } }
那假如调用 new Thread(我们自己的runnable子类).run();又会发生什么呢调用的就是Thread的run方法
runnable子类,然后执行子类的run方法
@Override public void run() { if (target != null) { target.run(); } }
阅读全文
0 0
- 2.java线程-thread vs runnable
- 线程 Thread VS Runnable 基础
- Java 线程 Thread Runnable
- java 线程 thread runnable
- 【Java基础】——线程Thread VS Runnable
- Thread vs Runnable in Java
- JAVA多线程Thread VS Runnable详解
- Java多线程之 Thread VS Runnable
- JAVA多线程之Thread VS Runnable
- Java多线程Thread VS Runnable详解
- java线程同时继承Thread实现Runnable
- java线程---Runnable和Thread的区别
- Java线程-Runnable和Thread的区别
- java线程---Runnable和Thread的区别
- Java线程基础(一):Thread和Runnable
- Java 线程 Runnable和Thread的区别
- Java 线程thread或runnable接口实习
- java 线程 --- Thread,Runnable,Callable 基础学习
- Leetcode之Intersection of Two Arrays II 问题
- Tomcat(一) Tomcat是什么:Tomcat与Java技术 Tomcat与Web应用 以及 Tomcat基本框架及相关配置
- 56.Scala中Self Types实战详解
- java序列化和反序列化
- 九月英语
- 2.java线程-thread vs runnable
- 覆盖虚表方式利用栈溢出漏洞
- Java语言基础组成(上)
- cadence 16.6 allegro PCB Editor快捷键调整格点大小
- LeetCode#74 Search a 2D Matrix(week4)
- 栈(一)利用栈计算表达式
- Tomcat(二) Tomcat实现: Servlet与web.xml介绍 以及 源码分析Tomcat实现细节
- Lintcode反转整数
- skynet底层源码阅读(6)-定时器