71、为什么 Thread 类的 sleep()和 yield ()方法是静态的?
Thread 类的 sleep()和 yield()方法将在当前正在执行的线程上运行。所以在其他 处于等待状态的线程上调用这些方法是没有意义的。这就是为什么这些方法是静 态的。它们可以在当前正在执行的线程中工作,并避免程序员错误的认为可以在 其他非运行线程调用这些方法。
72、如何确保线程安全?
在 Java 中可以有很多方法来保证线程安全——同步,使用原子类(atomic concurrent classes),实现并发锁,使用 volatile 关键字,使用不变类和线程安 全类。
73、同步方法和同步块,哪个是更好的选择?
同步块是更好的选择,因为它不会锁住整个对象(当然你也可以让它锁住整个对 象)。同步方法会锁住整个对象,哪怕这个类中有多个不相关联的同步块,这通 常会导致他们停止执行并需要等待获得这个对象上的锁。 同步块更要符合开放调用的原则,只在需要锁住的代码块锁住相应的对象,这样 从侧面来说也可以避免死锁。
74、如何创建守护线程?
使用 Thread 类的 setDaemon(true)方法可以将线程设置为守护线程,需要注意 的是,需要在调用 start()方法前调用这个方法,否则会抛出 IllegalThreadStateException 异常。
75、什么是 Java Timer 类?如何创建一个有特定时间间隔的 任务?
java.util.Timer 是一个工具类,可以用于安排一个线程在未来的某个特定时间执 行。Timer 类可以用安排一次性任务或者周期任务。 java.util.TimerTask 是一个实现了 Runnable 接口的抽象类,我们需要去继承这 个类来创建我们自己的定时任务并使用 Timer 去安排它的执行。