JUC并发编程 -- 线程常用方法概述 & start() vs run()
Posted Z && Y
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JUC并发编程 -- 线程常用方法概述 & start() vs run()相关的知识,希望对你有一定的参考价值。
1. 线程常用方法概述
2. start() vs run()
2.1 run()方法
测试代码:
import lombok.extern.slf4j.Slf4j;
@Slf4j(topic = "c.Test4")
public class Test4 {
public static void main(String[] args) {
Thread t1 = new Thread("t1") {
@Override
public void run() {
log.debug(Thread.currentThread().getName());
try {
// 让当前线程休眠3s
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
t1.run();
log.debug("do other things ...");
}
}
运行结果:
- 即使是调用t1线程的run方法,程序仍在 main 线程运行
2.2 start()方法
运行结果:
- 调用t1线程的start方法,程序在 t1 线程运行
2.3 小结
- 直接调用 run 是在主线程中执行了 run,没有启动新的线程
- 使用 start 是启动新的线程,通过新的线程间接执行 run 中的代码
2.4 补充:
连续调用2次start()方法,程序会报错
运行结果:
start方法对线程状态的影响:
import lombok.extern.slf4j.Slf4j;
@Slf4j(topic = "c.Test4")
public class Test4 {
public static void main(String[] args) {
Thread t1 = new Thread("t1") {
@Override
public void run() {
log.debug(Thread.currentThread().getName());
}
};
System.out.println("t1线程调用start方法前, t1的状态为: " + t1.getState());
t1.start();
System.out.println("t1线程调用start方法后, t1的状态为: " + t1.getState());
}
}
run方法对线程状态的影响(无影响):
以上是关于JUC并发编程 -- 线程常用方法概述 & start() vs run()的主要内容,如果未能解决你的问题,请参考以下文章
JUC并发编程 -- 线程常用方法之sleep() & yield() & 线程优先级 & sleep方法应用: 限制对 CPU 的使用
JUC并发编程 -- 线程常用方法之join()详解 & join同步应用 & join限时同步
JUC并发编程 共享模式之工具 JUC 线程安全的集合类 -- 线程安全的集合类概述