大厂P7 Java程序员高频面试题-9
Posted 四猿外
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大厂P7 Java程序员高频面试题-9相关的知识,希望对你有一定的参考价值。
volatile 变量和atomic 变量有什么不同?
Volatile 变量可以确保先行关系,即写操作会发生在后续的读操作之前, 但它并不能保证原子性。例如用volatile 修饰count 变量那么count++ 操作就不是原子性的。
而AtomicInteger 类提供的atomic 方法可以让这种操作具有原子性如getAndIncrement()方法会原子性的进行增量操作把当前值加一, 其它数据类型和引用变量也可以进行相似操作。
可以直接调用Thread 类的run ()方法么?
当然可以。但是如果我们调用了Thread 的run()方法,它的行为就会和普通的方法一样, 会在当前线程中执行。为了在新的线程中执行我们的代码, 必须使用Thread.start()方法。
如何让正在运行的线程暂停一段时间?
我们可以使用Thread 类的Sleep()方法让线程暂停一段时间。需要注意的是,这并不会让线程终止,一旦从休眠中唤醒线程,线程的状态将会被改变为Runnable,并且根据线程调度,它将得到执行。
你对线程优先级的理解是什么?
每一个线程都是有优先级的,一般来说,高优先级的线程在运行时会具有优先权,但这依赖于线程调度的实现,这个实现是和操作系统相关的(OS dependent)。我们可以定义线程的优先级,但是这并不能保证高优先级的线程会在低优先级的线程前执行。线程优先级是一个int 变量(从1-10),1 代表最低优先级, 10 代表最高优先级。
java 的线程优先级调度会委托给操作系统去处理, 所以与具体的操作系统优先级有关,如非特别需要,一般无需设置线程优先级。
什么是线程调度器(Thread Scheduler)和时间分片(TimeSlicing )?
线程调度器是一个操作系统服务,它负责为Runnable 状态的线程分配CPU 时间。一旦我们创建一个线程并启动它,它的执行便依赖于线程调度器的实现。
同上一个问题,线程调度并不受到Java 虚拟机控制,所以由应用程序来控制它是更好的选择(也就是说不要让你的程序依赖于线程的优先级)。
时间分片是指将可用的CPU 时间分配给可用的Runnable 线程的过程。分配CPU时间可以基于线程优先级或者线程等待的时间。
以上是关于大厂P7 Java程序员高频面试题-9的主要内容,如果未能解决你的问题,请参考以下文章