浅析Thread类run()和start()的区别
2024-08-25 03:59:57
1.先看看jdk文档
void run()
If this thread was constructed using a separate Runnable run object, then that Runnable object's run method is called; otherwise, this method does nothing and returns.
void start()
Causes this thread to begin execution; the Java Virtual Machine calls the run method of this thread.
线程调用run()方法是直接执行其run方法(正常情况)。
线程调用start()方法后进入准备状态,等待CPU的调度,当切换到该线程时,线程进入运行状态,执行run()方法。
既然都是执行线程的run方法,为什么不直接调用run方法?
2.再看代码
public class Main { public static void main(String[] args) {
Mythread t = new Mythread();
Thread thread1 = new Thread(t);
Thread thread2 = new Thread(t);
System.out.println("begin = " + System.currentTimeMillis());
thread1.setName("我是线程1");
thread2.setName("我是线程2");
thread1.run();
thread2.start();
System.out.println("end = " + System.currentTimeMillis());
}
} class Mythread extends Thread{
public void run() {
try {
System.out.println("threadName: "+this.currentThread().getName()+" begin");
Thread.sleep(1000);
System.out.println("threadName: "+this.currentThread().getName()+" end");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
运行结果:
可以发现直接调用run方法时是被主线程当做普通的方法调用,并不是真正的多线程。
最新文章
- Quartz2D内存管理
- [Java入门笔记] Java语言基础(一):注释、标识符与关键字
- ROS下创建第一个节点工程
- Windows下配置使用WinPcap
- 关于TouchEvent中出现异常:MessageQueue-JNI问题
- vim 分屏 screen
- WCF - 绑定后续之自定义绑定
- IE9 ";CSS 因 Mime 类型不匹配而被忽略“问题
- egret-android-support-gradle版
- JS学习之动态加载script和style样式
- https和http共存的nginx简单配置
- python '%r'或者'{!r}'的意思
- 服务管理之mysql基础
- python实现异步调用函数
- IDEA+'mvn' 不是内部或外部命令
- Day019--Python--反射
- Bootstrap Modal 使用remote从远程加载内容
- 解读 --- 基于微软企业商务应用平台 (Microsoft Dynamics 365) 之上的人工智能 (AI) 解决方案
- 028、HTML 标签3表单标签插入组件
- yarn 制作 npm 包