31、ConcurrentHashMap 的并发度是什么?
ConcurrentHashMap 的并发度就是 segment 的大小,默认为 16,这意味着最 多同时可以有 16 条线程操作 ConcurrentHashMap,这也是 ConcurrentHashMap 对 Hashtable 的最大优势,任何情况下,Hashtable 能同 时有两条线程获取 Hashtable 中的数据吗?
32、Linux 环境下如何查找哪个线程使用 CPU 最长
1、获取项目的 pid,jps 或者 ps -ef | grep java,这个前面有讲过 2、top -H -p pid,顺序不能改变
33、Java 死锁以及如何避免?
Java 中的死锁是一种编程情况,其中两个或多个线程被永久阻塞,Java 死锁情况 出现至少两个线程和两个或更多资源。 Java 发生死锁的根本原因是:在申请锁时发生了交叉闭环申请。
34、死锁的原因
1、是多个线程涉及到多个锁,这些锁存在着交叉,所以可能会导致了一个锁依赖 的闭环。 例如:线程在获得了锁 A 并且没有释放的情况下去申请锁 B,这时,另一个线程 已经获得了锁 B,在释放锁 B 之前又要先获得锁 A,因此闭环发生,陷入死锁循环。
2、默认的锁申请操作是阻塞的。所以要避免死锁,就要在一遇到多个对象锁交叉的情况,就要仔细审查这几个对 象的类中的所有方法,是否存在着导致锁依赖的环路的可能性。总之是尽量避免 在一个同步方法中调用其它对象的延时方法和同步方法。
35、怎么唤醒一个阻塞的线程 ?
如果线程是因为调用了 wait()、sleep()或者 join()方法而导致的阻塞,可以中断线 程,并且通过抛出 InterruptedException 来唤醒它;如果线程遇到了 IO 阻塞, 无能为力,因为 IO 是操作系统实现的,Java 代码并没有办法直接接触到操作系统。