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