一个面试题引发的思考:
一个线程上直接调用了run()方法结果如何?我当时想的是抱方法找不到错误,今天测试了一下我错了!找了点资料学习了下,加上自己的理解整理如下(望指点)。
(1)调用start:
调用start()启动一个线程,该线程进入就绪状态,等待cpu分配执行时间,一旦得到执行时间就执行
run()线程体。无需等待该线程执行完毕再执行其他线程,真正实现多线程,cpu不会因为某个线程需要等待资源而进入空闲状态,cpu会被分配给其他线程执行。
测试代码:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
执行结果:
0
1
2
3
4
5
6
7
8
9
10
11
多线程
12
13
14
15
16
...
多线程的位置不固定:有可能出现在打印数字之前,也有可能出现在数字中间。我想这是因为要看main线程和Test()线程谁先分配到cpu资源吧。
(2)调用run():
run()
就是一个普通的方法,完全可以直接调用,如果直接调用的话,程序只有main线程,程序执行路径也只有一条,还是顺序执行,run()执行完了才能执行其他的,这样就失去了线程的意义。
测试代码:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
执行结果:
...
993
994
995
996
997
998
999
多线程
执行结果永远都是这样。