Thread类中的方法调用方式:
1.this.XXX
这种调用方式表示的线程是:线程实例本身
2.Thread.currentThread.XXX() 或者Thread.XXX()
上面这两种写法一样,表示的线程是正在执行Thread.currentThread.XXX()所在代码块的线程
Thread类中的实例方法
从Thread类中的实例方法和类方法的角度讲解Thread中的方法,这种区分的角度也有助于理解多线程中的方法。实例方法,只和实例线程(也就是new出来的线程)本身挂钩,和当前运行的是哪个线程无关。
1.start()
通知”线程规划器“此线程可以运行了。正在等待CPU调用线程对象的run()方法,产生一个异步执行的效果
1 public class Thread01 extends Thread { 2 public void run() { 3 for (int i = 0; i < 3; i++) { 4 try { 5 Thread.sleep((int) Math.random() * 1000); 6 } catch (InterruptedException e) { 7 // TODO Auto-generated catch block 8 e.printStackTrace(); 9 } 10 System.out.println("run = " + Thread.currentThread().getName()); 11 } 12 } 13 14 public static void main(String[] args) { 15 Thread01 thread01 = new Thread01(); 16 thread01.start(); 17 18 for (int i = 0; i < 3; i++) { 19 try { 20 Thread.sleep((int) Math.random() * 1000); 21 } catch (InterruptedException e) { 22 // TODO Auto-generated catch block 23 e.printStackTrace(); 24 } 25 System.out.println("run = " + Thread.currentThread().getName()); 26 } 27 } 28 29 }
运行结果:
run = Thread-0
run = main
run = Thread-0
run = main
run = Thread-0
run = main
结果表明:CPU执行哪个线程的代码具有不确定性
1 public class Thread01 extends Thread { 2 public void run() { 3 for (int i = 0; i < 3; i++) { 4 try { 5 Thread.sleep((int) Math.random() * 1000); 6 } catch (InterruptedException e) { 7 // TODO Auto-generated catch block 8 e.printStackTrace(); 9 } 10 System.out.println("run = " + Thread.currentThread().getName()); 11 } 12 } 13 14 public static void main(String[] args) { 15 Thread01 thread01 = new Thread01(); 16 thread01.run();//将start()换为run()则不启动新的线程,执行的还是主方法 17 18 for (int i = 0; i < 3; i++) { 19 try { 20 Thread.sleep((int) Math.random() * 1000); 21 } catch (InterruptedException e) { 22 // TODO Auto-generated catch block 23 e.printStackTrace(); 24 } 25 System.out.println("run = " + Thread.currentThread().getName()); 26 } 27 } 28 29 }
结果:
run = main
run = main
run = main
run = main
run = main
run = main
这里就是很明显看出来start()是线程的启动入口。另外需要注意的是:调用start()方法的顺序不代表线程启动的顺序,线程启动顺序具有不确定性。
原文:http://www.cnblogs.com/leehfly/p/4972434.html