![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面试题
hseee
保持敬畏
展开
-
—个线程两次调用start方法会出现什么情况?
Java的线程是不允许启动两次的,第二次调用必然会抛出illegalThreadStateException。 这是一种运行时异常,多次调用 start 被认为是编程错误。 出现这种情况还需要了解线程生命周期的不同状态: 在Java5以后,线程状态被明确定义在其公共内部枚举类型java.lang.Thread.State 中,分别是: 新建(NEW),表示线程被创建出来还没真正启动的状态,可以认为它是个 Java内部状态。 就绪(RUNNABLE),表示该线程已经在 VM中执行,当然由于执行需要计算资源原创 2021-05-25 15:59:15 · 211 阅读 · 0 评论 -
synchronized底层如何实现?什么是锁的升级、降级?
synchronized底层的实现 synchronized底层是由一对monitorenter/monitorexit指令实现的,Monitor 对象是同步的基本实现单元。 在JDK1.6之前,Monitor的实现完全是依靠操作系统内部的互斥锁,只有无锁和重量级锁,涉及到用户态到内核态的切换,所以这个时候同步操作是一个无差别的重量级操作。 在JDK1.6之后,JVM对synchronized进行了优化,提供了除无锁和重量级锁以外的两种锁:偏向锁和轻量级锁。提高了其性能 锁的升级、降级 所谓锁的升级、原创 2021-05-25 15:47:24 · 211 阅读 · 0 评论 -
并发包中的ConcurrentLinkedQueue和LinkedBlockingQueue有什么区别
标题ConcurrentLinkedQueue和LinkedBlockingQueue的区别 ConcurrentLinkedQueue LinkedBlockingQueue 是否有锁 CAS的无锁技术 有锁 是否有界 无界 有界(容易误解) Concurrent 类型基于CAS的无锁技术,在常见的多线程访问场景,一般可以提供较高吞吐量。 而 LinkedBlockingQueue 内部则是基于锁,并提供了 BlockingQueue 的等待性方法。 ConcurrentLink原创 2021-05-25 15:39:47 · 96 阅读 · 0 评论