多线程 -- run()方法和start()方法的区别
来源:互联网 发布:手机怎么开通淘宝卖家 编辑:程序博客网 时间:2024/05/19 05:05
一. 直接调用run()方法
public class Two_Thread implements Runnable {public static void main(String[] args) {// TODO Auto-generated method stubTwo_Thread R = new Two_Thread();R.run(); // 直接调用run()方法, 而不是start()方法启动线程System.out.println(Thread.currentThread().getName()+" back to main");}@Overridepublic void run() {// TODO Auto-generated method stubincreate();}private void increate() { // TODO Auto-generated method stubfor(int i=0;i<5;i++){System.out.println(Thread.currentThread().getName()+" i = "+i); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); }}}}无论什么时候,打印的log都是以下不变:
main i = 0
main i = 1
main i = 2
main i = 3
main i = 4
main back to main
由log可以看出,run()方法是通过main线程启动的,并且它不不具有任何内在的线程能力(即总是执行完run方法,才打印main back to main)。如果要实现线程行为,必须采用start()方法。
二.添加一个线程t1. 并且去掉线程休眠 Thread.sleep(1000);
public class Two_Thread implements Runnable {public static void main(String[] args) {// TODO Auto-generated method stubTwo_Thread R = new Two_Thread();Thread t1 = new Thread(R,"1"); //用Runnable对象1初始化t1.start(); //通过start()方法启动线程R.run();//调用Runable对象中的run()方法System.out.println(Thread.currentThread().getName()+" back to main");}@Overridepublic void run() {// TODO Auto-generated method stubincreate();}private void increate() { // TODO Auto-generated method stubfor(int i=0;i<5;i++){System.out.println(Thread.currentThread().getName()+" i = "+i); }}}
此时打印的log是随机的:但是无论什么时候,这句“main back to main”log,一定是在执行完main i = 4之后才会执行。因为在主线程中,这俩句是顺序执行的。
情况1:
main i = 0
1 i = 0
main i = 1
1 i = 1
main i = 2
1 i = 2
main i = 3
1 i = 3
main i = 4
1 i = 4
main back to main
情况2:
1 i = 0
main i = 0
1 i = 1
main i = 1
1 i = 2
main i = 2
1 i = 3
main i = 3
main i = 4
main back to main
1 i = 4
0 0
- 多线程 -- run()方法和start()方法的区别
- java 多线程 start()和run()方法的区别
- 多线程中start和run方法的区别
- 多线程中 run() 和 start() 方法 的区别
- 多线程中run()和start()方法的区别
- Java多线程中run和start方法的区别
- run方法和start方法的区别
- 关于多线程的start()和run()方法
- Thread的run和start方法区别
- Thread run()和start()方法的区别
- start和run方法区别
- java实现多线程的方式以及run方法和start方法的区别
- 多线程中调用run()方法和start()方法的简单区别
- 多线程中start()与run()方法的区别
- java多线程 run() 与start()方法的区别
- 线程的start()方法和run()方法的区别
- Thread.java start方法和run方法的区别
- java Thread中,run方法和start方法的区别
- <<thinking in java>>阅读笔记01
- 为什么需要异常处理(转载)
- ArcEngine高亮显示
- 对Margin的理解
- Silverlight缩放到指定要素
- 多线程 -- run()方法和start()方法的区别
- Session技术
- 【转】《千与千寻》 那首平静的曲…
- ArcGIS Server10.1笔记1
- SQL-游标的使用学习(转载)
- C#调用C++创建的DLL
- ANDROID开发中定时器的3种方法
- IWorkSpace与IWorkSpaceFactory与I…
- AE开发----获取地图上当前选中的要…