|
45 | 45 | }
|
46 | 46 |
|
47 | 47 | }
|
48 | | - |
| 48 | + |
| 49 | + |
49 | 50 | 三种新建线程的方式具体看以上注释,需要主要的是:
|
50 | 51 |
|
51 | 52 |
|
52 | 53 | - 由于java不能多继承可以实现多个接口,因此,在创建线程的时候尽量多考虑采用实现接口的形式;
|
53 | 54 | - 实现callable接口,提交给ExecutorService返回的是异步执行的结果,另外,通常也可以利用FutureTask(Callable<V> callable)将callable进行包装然后FeatureTask提交给ExecutorsService。如图,
|
54 | 55 |
|
55 | | - |
| 56 | + |
56 | 57 |
|
57 | 58 |
|
58 | 59 | 另外由于FeatureTask也实现了Runable接口也可以利用上面第二种方式(实现Runable接口)来新建线程;
|
|
61 | 62 | # 2. 线程状态转换 #
|
62 | 63 |
|
63 | 64 |
|
64 | | - |
| 65 | + |
65 | 66 |
|
66 | 67 |
|
67 | 68 |
|
|
71 | 72 |
|
72 | 73 | 用一个表格将上面六种状态进行一个总结归纳。
|
73 | 74 |
|
74 | | - |
| 75 | + |
75 | 76 |
|
76 | 77 |
|
77 | 78 | # 3. 线程状态的基本操作 #
|
|
83 | 84 | isInterrupted()来感知其他线程对其自身的中断操作,从而做出响应。另外,同样可以调用Thread的静态方法
|
84 | 85 | interrupted()对当前线程进行中断操作,该方法会清除中断标志位。**需要注意的是,当抛出InterruptedException时候,会清除中断标志位,也就是说在调用isInterrupted会返回false。**
|
85 | 86 |
|
86 | | - |
| 87 | + |
87 | 88 |
|
88 | 89 |
|
89 | 90 |
|
|
0 commit comments