9.18. Java 中如何停止一个线程
Java 提供了很丰富的 API 但没有为停止线程提供 API。JDK 1.0 本来有一些像 stop()、suspend() 和 resume() 的控制方法但是由于潜在的死锁威胁因此在…
9.17. 什么是线程安全 Vector 是线程安全类吗?
如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的…
9.16. 如何保证容器是线程安全
Java 提供了不同层面的线程安全支持。在传统集合框架内部,除了 Hashtable 等同步容器,还提供了所谓的同步包装器(Synchronized Wrapper),我们可以…
9.15. 什么是死锁(Deadlock)?如何分析和避免死锁
死锁是指两个以上的线程永远阻塞的情况,这种情况产生至少需要两个以上的线程和两个以上的资源。 分析死锁,我们需要查看 Java 应用程序的线程转储。…
9.12. 线程的生命周期
当我们在 Java 程序中新建一个线程时,它的状态是 New。当我们调用线程的 start() 方法时,状态被改变为 Runnable。线程调度器会为 Runnable 线程池中…
9.11. 简述 synchronized 和 java.util.concurrent.locks.Lock 的异同
主要相同点: Lock 能完成 synchronized 所实现的所有功能主要不同点: Lock 有比 synchronized 更精确的线程语义和更好的性能。 synchronized 会自 …
9.10. synchronized 和 ReentrantLock 区别
synchronized 是 Java 内建的同步机制,所以也有人称其为 Intrinsic Locking,它提供了互斥的语义和可见性,当一个线程已经获取当前锁时,其他试图获…
9.9. 关键字 volatile 与 synchronized 作用与区别
volatile 它所修饰的变量不保留拷贝,直接访问主内存中的。 在Java内存模型中,有 main memory,每个线程也有自己的 memory (例如寄存器)。为了性能,…
9.8. 如何在 Java 中实现线程
两种方式:java.lang.Thread 类的实例就是一个线程但是它需要调用 java.lang.Runnable 接口来执行,由于线程类本身就是调用的 Runnable 接口所以你可…