Java多线程系列--“基础篇”03之 Thread中start()和run()的区别
来源:互联网 发布:安卓的内存优化 编辑:程序博客网 时间:2024/05/16 11:55
转载链接:http://www.cnblogs.com/skywang12345/p/java_threads_category.html
start() 和 run()的区别说明
start() : 它的作用是启动一个新线程,新线程会执行相应的run()方法。start()不能被重复调用。
run() : run()就和普通的成员方法一样,可以被重复调用。单独调用run()的话,会在当前线程中执行run(),而并不会启动新线程!
start() 和 run()的区别示例
下面,通过一个简单示例演示它们之间的区别。源码如下:
// Demo.java 的源码class MyThread extends Thread{ public MyThread(String name) { super(name); } public void run(){ System.out.println(Thread.currentThread().getName()+" is running"); } }; public class Demo { public static void main(String[] args) { Thread mythread=new MyThread("mythread"); System.out.println(Thread.currentThread().getName()+" call mythread.run()"); mythread.run(); System.out.println(Thread.currentThread().getName()+" call mythread.start()"); mythread.start(); } }
运行结果:
main call mythread.run()main is runningmain call mythread.start()mythread is running
结果说明:
(01) Thread.currentThread().getName()是用于获取“当前线程”的名字。当前线程是指正在cpu中调度执行的线程。
(02) mythread.run()是在“主线程main”中调用的,该run()方法直接运行在“主线程main”上。
(03) mythread.start()会启动“线程mythread”,“线程mythread”启动之后,会调用run()方法;此时的run()方法是运行在“线程mythread”上。
start() 和 run()相关源码(基于JDK1.7.0_40)
Thread.java中start()方法的源码如下:
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()方法。
private native void start0();
Thread.java中run()的代码如下:
public void run() { if (target != null) { target.run(); }}
说明:target是一个Runnable对象。run()就是直接调用Thread线程的Runnable成员的run()方法,并不会新建一个线程。
阅读全文
0 0
- Java多线程系列--“基础篇”03之 Thread中start()和run()的区别
- Java多线程系列--“基础篇”03之 Thread中start()和run()的区别
- Java多线程系列--“基础篇”03之 Thread中start()和run()的区别 (r)
- Java多线程系列--“基础篇”03之 Thread中start()和run()的区别
- Java多线程系列--“基础篇”03之 Thread中start()和run()的区别
- Java多线程系列--“基础篇”03之 Thread中start()和run()的区别
- Java多线程系列--“基础篇”03之 Thread中start()和run()的区别
- Java多线程系列--“基础篇”之 Thread中start()和run()的区别
- Java多线程系列--【基础篇03】- Thread中start()和run()的区别
- Java多线程基础--03之 Thread中start()和run()的区别
- Java多线程--Thread中start()和run()的区别
- JAVA多线程之——Thread中start()和run()的区别
- Java多线程系列(2)--Thread中start()和run()
- java中thread的start()和run()的区别
- java中thread的start()和run()的区别
- java中thread的start()和run()的区别
- Java中Thread类的start()和run()的区别
- java中thread的start()和run()的区别
- SQL 性能调优日常积累
- Python---变量的管理/三元运算
- 正则表达式
- JMS(java message service)java消息服务
- 前端后端分离,怎么解决SEO优化的问题?
- Java多线程系列--“基础篇”03之 Thread中start()和run()的区别
- 算法分析课每周练习 Word Search II
- sql 查询表中所有字段的数据类型
- 解决Centos7下中文显示乱码
- AndroidStudio GsonFormat插件的介绍及集成使用
- vs2013 + QT组件开发串口程序
- [hihocoder1526]序列的值
- Effective C++第二章-构造,析构,赋值 -2
- Spring boot +Quartz +mongodb的分布式定时任务详解