- 给出线程组的定义
- 你为何使用线程组
- 你为何应该避免使用线程组?
- 你为何应该认识线程组?
- 判断对错:如何线程调用get()方法时,调用线程的存储槽里没有值,改方法就会去调用initialValue()。
- 如何从父线程传递一个值到子线程中?
- 指出组成timer框架的所有类。
- 判断对错:Timer()会创建一个新的定时器,其任务执行线程会以守护线程的方式运行
- 给出固定延迟的执行任务的定义
- 你会调用那些方法来调度一个固定延迟的执行任务
- 给出固定速度率的执行任务的定义
- Timer的cancle()和TimerTask的cancle()方法有何区别?
- 创建一个BackAndForth应用程序,使用Timer和TimerTask 去反复地移动一个星号:向前20步,然后向右20步。星号通过System.out.print()输出。
小结
类ThreadGroup 描述了一个线程组,它存储了一组线程。线程组通过把方法应用到其中的所有线程而简化了多条线程的管理工作。由于多数有用的方法因竞态条件遭到废弃,你不应该再使用线程组。
类ThreadLocal 描述了一个线程局部变量,它可以让你把每条线程的数据(如用户ID)和线程关联。线程局部变量针对每个访问该变量的线程都提供了单独的存储槽。你可以把它想象成具有多个槽的变量,然后每条线程都可以在这个变量中存储不同的值。每条线程只能看到自己的值而不会意识到其他的线程在这个变量中也有属于自己的值。存储在线程局部变量中的值都不是相关的。父线程可以借助类InheritableThreadLocal 把值传递到子线程中。
通常情况下,安排单次的执行任务或者规律性的重复任务是有必要的。Java 1.3引入了定时框架,用于在定时器上下文中可控制的控制线程的执行,其由类Timer和TimerTask 构成。