Java基础加强之并发(三)Thread中start()和run()的区别详解编程语言
2023-06-13 09:20:30 时间
Thread中start()和run()的区别
start() : 它的作用是启动一个新线程,新线程会执行相应的run()方法。start()不能被重复调用。
run() : run()就和普通的成员方法一样,可以被重复调用。单独调用run()的话,会在当前线程中执行run(),而并不会启动新线程!
MyThreadTest.java代码
class MyThread extends Thread{ public void run() { System.out.println("线程名:"+Thread.currentThread().getName()); public class MyThreadTest { public static void main(String[] args) { MyThread mythread = new MyThread(); mythread.start();//运行结果:线程名:Thread-0 mythread.run();//运行结果:线程名:main }
结果说明:
(01) Thread.currentThread().getName()是用于获取“当前线程”的名字。当前线程是指正在cpu中调度执行的线程。
(02) mythread.run()是在“主线程main”中调用的,该run()方法直接运行在“主线程main”上。
(03) mythread.start()会启动“线程mythread”,“线程mythread”启动之后,会调用run()方法;此时的run()方法是运行在“线程mythread”上。
public synchronized void start() { // 如果线程不是"就绪状态",则抛出异常! if (threadStatus != 0) throw new IllegalThreadStateException(); // 将线程添加到ThreadGroup中 group.add(this); boolean started = false; try { // 通过start0()启动线程 start0(); // 设置started标记 started = true; } finally { try { if (!started) { group.threadStartFailed(this); } catch (Throwable ignore) { }
说明:start()实际上是通过本地方法start0()启动线程的。而start0()会新运行一个线程,新线程会调用run()方法。
Thread类中run源码private Runnable target;
public void run() { if (target != null) { target.run(); }
说明:target是一个Runnable对象。run()就是直接调用Thread线程的Runnable成员的run()方法,并不会新建一个线程。
11147.html
cjava相关文章
- Java API 基础
- Java基础三:Java 核心技术[通俗易懂]
- java用正则表达式大全_Java 正则表达式 大全「建议收藏」
- java 唯一随机数_JAVA随机数
- java 优先级队列_JAVA 队列
- 大数据必学Java基础(六十):集合补充
- 【JAVA面试必会】JMM高并发详解(java内存模型、JMM三大特征、volatile关键字 )「建议收藏」
- jvm基础_java实现栈四个方法
- Java基础,if,Integer最大值最小值,负数移位[通俗易懂]
- Java学习:assert(断言)的使用——测试程序和AssertionError错误事件
- 学Java又想搞副业,你确定不来了解一下?文尾更精彩噢
- 大数据必学Java基础(一百零二):连接池的使用
- 【Java面试八股文宝典之基础篇】备战2023 查缺补漏 你越早准备 越早成功!!!——Day10
- Java算法之图的遍历(邻接矩阵)详解编程语言
- Java版2048游戏实现代码详解编程语言
- java基础学习总结——static关键字详解编程语言
- Java中的ReentrantLock和synchronized两种锁机制的对比详解编程语言
- Java多线程和并发基础详解编程语言
- java中字符串 占位符替换%s {0}详解编程语言
- java进程 cpu100%问题排查详解编程语言
- Java学习Linux基础的必要性(java要学linux)
- 处理Redis Java: 处理过期元素(redisjava过期)
- 询Java与Oracle联合查询更高效的数据处理方式(java oracle查)
- Redis面试中Java相关技术面试题汇总(redis面试题java)
- 并发Redis锁保障Java并发性(redis锁实现java)
- 利用Redis锁实现Java程序并发控制(redis锁java实现)
- JAVA中list,set,数组之间的转换详解
- Java基础之java处理ip的工具类