首页 > 其他 > 详细

2.Thread中的实例方法

时间:2015-11-17 18:26:44      阅读:350      评论:0      收藏:0      [点我收藏+]

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()方法的顺序不代表线程启动的顺序,线程启动顺序具有不确定性

 

2.Thread中的实例方法

原文:http://www.cnblogs.com/leehfly/p/4972434.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!