最近为了考取Java 7的Gold资格而补课,多线程这一块看了好长一段时间才算有点头绪。 下面几点算是心得吧。明白这些东西之后,join()也差不多可以理解了。
- 主线程和主线程生成的子线程是两个独立的东西。start()之后都是各自奔向终点。
- 如果子线程跑得快,主线程无法对它进行interrupt()操作。 因为人家已经结束了,你再发号施令已经晚了。
- 被interrupt()的子线程不会就此终止,而是会恢复原来的执行。执行结果如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31public class Sample11_5 {
public static void main(String\[\] args) {
try {
ThreadA a = new ThreadA();
a.start();
System.out.println("main : sleep start.");
Thread.sleep(1000);
System.out.println("main : sleep end.");
a.interrupt();
} catch (InterruptedException e) {
}
}
}
class ThreadA extends Thread{
public void run() {
try {
System.out.println("Thread A : sleep start");
Thread.sleep(5000);
System.out.println("Thread A : sleep end");
} catch (InterruptedException e) {
System.out.println("Catch Thread A interrupted");
}
System.out.println("Thread A finished.");
}
}
main : sleep start.
Thread A : sleep start
main : sleep end.
Catch Thread A interrupted
Thread A finished.