大厂P7 Java程序员高频面试题-7
Posted 四猿外
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大厂P7 Java程序员高频面试题-7相关的知识,希望对你有一定的参考价值。
为什么wait 和notify 方法要在同步块中调用?
Java API 强制要求这样做, 如果你不这么做, 你的代码会抛出IllegalMonitorStateException 异常。还有一个原因是为了避免wait 和notify之间产生竞态条件。
为什么你应该在循环中检查等待条件?
处于等待状态的线程可能会收到错误警报和伪唤醒,如果不在循环中检查等待条件, 程序就会在没有满足结束条件的情况下退出。
Java 中的同步集合与并发集合有什么区别?
同步集合与并发集合都为多线程和并发提供了合适的线程安全的集合,不过并发集合的可扩展性更高。在Java1.5 之前程序员们只有同步集合来用且在多线程并发的时候会导致争用,阻碍了系统的扩展性。Java5 介绍了并发集合像ConcurrentHashMap,不仅提供线程安全还用锁分离和内部分区等现代技术提高了可扩展性。
什么是线程池? 为什么要使用它?
创建线程要花费昂贵的资源和时间, 如果任务来了才创建线程那么响应时间会变长, 而且一个进程能创建的线程数有限。为了避免这些问题,在程序启动的时候就创建若干线程来响应处理,它们被称为线程池, 里面的线程叫工作线程。从JDK1.5 开始,Java API 提供了Executor 框架让你可以创建不同的线程池。
怎么检测一个线程是否拥有锁?
在java.lang.Thread 中有一个方法叫holdsLock(),它返回true 如果当且仅当当前线程拥有某个具体对象的锁。
你如何在Java 中获取线程堆栈?
kill -3 [java pid]
不会在当前终端输出,它会输出到代码执行的或指定的地方去。比如,kill -3 tomcat pid, 输出堆栈到log 目录下。
Jstack [java pid]
这个比较简单,在当前终端显示,也可以重定向到指定文件中。
-JvisualVM: Thread Dump
不做说明,打开JvisualVM 后,都是界面操作,过程还是很简单的。
JVM 中哪个参数是用来控制线程的栈堆栈小的?
Xss 每个线程的栈大小
以上是关于大厂P7 Java程序员高频面试题-7的主要内容,如果未能解决你的问题,请参考以下文章