61、Java 中的 ReadWriteLock 是什么?
读写锁是用来提升并发程序性能的锁分离技术的成果。
62、volatile 变量和 atomic 变量有什么不同?
Volatile 变量可以确保先行关系,即写操作会发生在后续的读操作之前, 但它并不 能保证原子性。例如用 volatile 修饰 count 变量那么 count++ 操作就不是原子 性的。 而 AtomicInteger 类提供的 atomic 方法可以让这种操作具有原子性如 getAndIncrement()方法会原子性的进行增量操作把当前值加一,其它数据类型 和引用变量也可以进行相似操作。
63、可以直接调用 Thread 类的 run ()方法么?
当然可以。但是如果我们调用了 Thread 的 run()方法,它的行为就会和普通的方 法一样,会在当前线程中执行。为了在新的线程中执行我们的代码,必须使用 Thread.start()方法。
64、如何让正在运行的线程暂停一段时间?
我们可以使用 Thread 类的 Sleep()方法让线程暂停一段时间。需要注意的是,这 并不会让线程终止,一旦从休眠中唤醒线程,线程的状态将会被改变为 Runnable, 并且根据线程调度,它将得到执行。
65、你对线程优先级的理解是什么?
每一个线程都是有优先级的,一般来说,高优先级的线程在运行时会具有优先权, 但这依赖于线程调度的实现,这个实现是和操作系统相关的(OS dependent)。我 们可以定义线程的优先级,但是这并不能保证高优先级的线程会在低优先级的线 程前执行。线程优先级是一个 int 变量(从 1-10),1 代表最低优先级,10 代表最 高优先级。 java 的线程优先级调度会委托给操作系统去处理,所以与具体的操作系统优先级 有关,如非特别需要,一般无需设置线程优先级。