本文共 3056 字,大约阅读时间需要 10 分钟。
什么是线程,有很多种说法,我们简单的理解一下:线程就是在一个进程当中私有运行的一个子任务子单元。
1:先来了解一下线程的2个方法
1)start:用来开启一个新的线程并且执行run方法 2)run:不新起线程,直接在当前线程中执行Thread的run方法我们通过2个例子来彻底弄懂一下:
实例1,查看start和run的区别:package com.test.main;public class Test { public static void main(String[] args) { int a = 10; System.out.println("Main-a:"+a); Thread thread = new Thread(new Runnable() { public void run() { System.out.println("执行Runnable1中打印线程名:"+Thread.currentThread().getName()); } }); thread.setName("自定义Thread"); thread.start(); Thread thread2 = new Thread(new Runnable() { public void run() { System.out.println("执行Runnable2中打印线程名:"+Thread.currentThread().getName()); } }); thread2.setName("自定义Thread2"); thread2.run(); System.out.println("执行Main中打印线程名:"+Thread.currentThread().getName()); }}运行结果:Main-a:10执行Runnable2中打印线程名:main执行Main中打印线程名:main执行Runnable1中打印线程名:自定义Thread说明:1:start会新起一个线程,去私有的执行他的run方法2:new一个Thread直接执行run方法,他不会新起一个线程,他会在当前所在线程去执行这个new线程的Thread方法
看下面的例子来证明一下:
package com.test.main;public class Test { static class MyThread extends Thread{ public MyThread(String name){ super(name); } public void run(){ System.out.println("myThread打印线程名"+Thread.currentThread().getName()); } } public static void main(String[] args) { int a = 10; System.out.println("Main-a:"+a); MyThread thread = new MyThread("myThread"); thread.run(); System.out.println("执行Main中打印线程名:"+Thread.currentThread().getName()); }}
调试过程如图:
实例2:main线程和Thread默认的执行顺序问题
package com.test.main;public class Test { public static void main(String[] args) { int a = 10; System.out.println("Main-a:"+a); Thread thread = new Thread(new Runnable() { public void run() { for(int i = 0 ;i < 1000;i++){ System.out.println("第"+i+"次执行Runnable1中打印线程名:"+Thread.currentThread().getName()); } } }); thread.setName("自定义的Thread1"); thread.setPriority(10); thread.start(); Thread thread2 = new Thread(new Runnable() { public void run() { for(int i = 0 ;i < 1000;i++){ System.out.println("第"+i+"次执行Runnable2中打印线程名:"+Thread.currentThread().getName()); } } }); thread2.setName("自定义的Thread2"); thread2.setPriority(10); thread2.start(); for(int i = 0 ;i < 1000;i++){ System.out.println("第"+i+"次执行Main中打印线程名:"+Thread.currentThread().getName()); } }}运行结果:看其中一段:第314次执行Runnable2中打印线程名:自定义的Thread2第580次执行Runnable1中打印线程名:自定义的Thread1第687次执行Main中打印线程名:main第581次执行Runnable1中打印线程名:自定义的Thread1第315次执行Runnable2中打印线程名:自定义的Thread2第582次执行Runnable1中打印线程名:自定义的Thread1第688次执行Main中打印线程名:main说明:这个程序有main线程,Thread1,Thread2,他们的执行先后顺序是随机无序的,cpu抢到哪个线程,就执行哪个。
看完,你明白了吗?
下一篇:转载地址:http://nikmi.baihongyu.com/