2020-09-16

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 的线程优先级调度会委托给操作系统去处理, 所以与具体的操作系统优先级有关, 如非特别需要, 一般无需设置线程优先级。

66、什么是线程调度器(Thread Scheduler)和时间分片(Time Slicing )?

线程调度器是一个操作系统服务,它负责为 Runnable 状态的线程分配 CPU 时间。一旦我 们创建一个线程并启动它, 它的执行便依赖于线程调度器的实现。 同上一个问题, 线程调度并不受到 Java 虚拟机控制, 所以由应用程序来控制它是更好的 选择( 也就是说不要让你的程序依赖于线程的优先级)。 时间分片是指将可用的 CPU 时间分配给可用的 Runnable 线程的过程。分配 CPU 时间可 以基于线程优先级或者线程等待的时间。

67、你如何确保 main()方法所在的线程是Java 程序最后结束 的线程?

我们可以使用 Thread 类的 join()方法来确保所有程序创建的线程在 main()方法退出前结 束。

68、线程之间是如何通信的?

当线程间是可以共享资源时, 线程间通信是协调它们的重要的手段。Object 类中 wait()\notify()\notifyAll() 方法可以用于线程间通信关于资源的锁的状态。

69、为什么线程通信的方法 wait(), notify()和notifyAll()被定 义在Object 类里?

Java 的每个对象中都有一个锁(monitor,也可以成为监视器) 并且 wait(),notify()等方法 用于等待对象的锁或者通知其他线程对象的监视器可用。在 Java 的线程中并没有可供任何 对象使用的锁和同步器。这就是为什么这些方法是 Object 类的一部分, 这样 Java 的每一 个类都有用于线程间通信的基本方法。

70、为什么 wait(), notify()和notifyAll ()必须在同步方法或 者同步块中被调用?

当一个线程需要调用对象的 wait()方法的时候,这个线程必须拥有该对象的锁,接着它就 会释放这个对象锁并进入等待状态直到其他线程调用这个对象上的 notify() 方法。同样 的,当一个线程需要调用对象的 notify()方法时,它会释放这个对象的锁, 以便其他在等 待的线程就可以得到这个对象锁。由于所有的这些方法都需要线程持有对象的锁, 这样就 只能通过同步来实现, 所以他们只能在同步方法或者同步块中被调用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值