多线程
面试题库
这个作者很懒,什么都没留下…
展开
-
40.为什么我们调用 start() 方法时会执行 run() 方法,为什么我们不能直接调用 run() 方法?
new 一个 Thread,线程进入初始状态;调用 start()方法,会启动一个线程并使线程进入了就绪状态,当分配到时间片后就可以开始运行了。 start() 会执行线程的相应准备工作,然后自动执行 run() 方法的内容,这是真正的多线程工作。 而直接执行 run() 方法,会把 run 方法当成一个 main 线程下的普通方法去执行,并不会在某个线程中执行它,所以这并不是多线程工作。总结: 调用 start 方法可启动线程并使线程进入就绪状态,而 run 方法只是 thread 的一个普通转载 2021-07-13 14:15:05 · 382 阅读 · 0 评论 -
39.并发与并行的区别?
《并发与并行的区别》:https://blog.csdn.net/java_zero2one/article/details/51477791转载 2021-07-13 14:14:41 · 85 阅读 · 0 评论 -
38.程序计数器为什么是私有的?虚拟机栈和本地方法栈为什么是私有的?
1 程序计数器为什么是私有的?程序计数器主要有下面两个作用:字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:顺序执行、选择、循环、异常处理。在多线程的情况下,程序计数器用于记录当前线程执行的位置,从而当线程被切换回来的时候能够知道该线程上次运行到哪儿了。(需要注意的是,如果执行的是 native 方法,那么程序计数器记录的是 undefined 地址,只有执行的是 Java 代码时程序计数器记录的才是下一条指令的地址。)所以,程序计数器私有主要是为了线程切换后能恢复转载 2021-07-13 14:14:29 · 443 阅读 · 0 评论 -
37.什么是多线程的上下文切换?
即使是单核CPU也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现这个机制。时间片是CPU分配给各个线程的时间,因为时间片非常短,所以CPU通过不停地切换线程执行,让我们感觉多个线程时同时执行的,时间片一般是几十毫秒(ms)上下文切换过程中,CPU会停止处理当前运行的程序,并保存当前程序运行的具体位置以便之后继续运行CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个任务。但是,在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再次加载这个任转载 2021-07-13 14:14:21 · 142 阅读 · 0 评论 -
36.什么是自旋锁?
《什么是自旋锁?》:https://blog.csdn.net/pgs1004151212/article/details/90903075转载 2021-07-13 14:14:14 · 59 阅读 · 0 评论 -
35.什么是AQS?
《什么是AQS?》:https://www.cnblogs.com/fanBlog/p/9336126.html转载 2021-07-13 14:14:07 · 55 阅读 · 0 评论 -
34.什么是CAS?
《什么是CAS机制?》:https://blog.csdn.net/qq_32998153/article/details/79529704转载 2021-07-13 14:13:59 · 58 阅读 · 0 评论 -
33.说一下你对volatile的理解?
《java中voliate的讲解》:https://blog.csdn.net/yinbucheng/article/details/71305951/转载 2021-07-13 14:13:40 · 73 阅读 · 0 评论 -
32.怎么停止一个运行中的线程?
《Java终止线程的三种方式》:https://www.cnblogs.com/liyutian/p/10196044.html《Java中如何正确而优雅的终止运行中的线程》:https://blog.csdn.net/zhangliangzi/article/details/52484302转载 2021-07-13 14:13:30 · 57 阅读 · 0 评论 -
31.什么是悲观锁?什么是乐观锁?
《什么是乐观锁与悲观锁?》:https://www.sohu.com/a/306900091_250298《Java锁、悲观乐观锁、分布式锁?细说那年我们用过的锁》:https://zhuanlan.zhihu.com/p/89195796转载 2021-07-13 14:13:16 · 50 阅读 · 0 评论 -
30.伪共享?
1了解过什么是“伪共享”吗?CPU缓存从内存读数据时,是按缓存行读取的,即使只用到一个变量,也要将整行数据进行读取,这行数据量可能包含其他变量。当多个线程同时修改同一个缓存行里的不同变量时,由于同时只能有一个线程在操作,所以相比将每个变量放到不同缓存行里,性能会有所下降。多个线程同时修改了同一个缓存行上的不同变量,由于不能并发修改,所以称为“伪共享”。2.“伪共享”出现的原因是什么?因为CPU缓存和内存交换数据的单位是缓存行,而同一个缓存行里的多个变量不能同时被多个线程修改。3.如何避免“伪转载 2021-07-12 20:39:58 · 75 阅读 · 0 评论 -
29.InheritableThreadLocal原理知道吗?
《InheritableThreadLocal详解》:https://www.jianshu.com/p/94ba4a918ff5转载 2021-07-12 20:39:51 · 96 阅读 · 0 评论 -
27.Java线程池实现原理?
《Java并发编程:线程池的使用》:https://www.cnblogs.com/dolphin0520/p/3932921.html转载 2021-07-12 20:39:13 · 56 阅读 · 0 评论 -
26.ReentrantLock实现原理?
《ReentrantLock公平锁的实现原理》:https://blog.csdn.net/yanbin0830/article/details/107542529转载 2021-07-12 20:38:35 · 70 阅读 · 0 评论 -
25.介绍一下同步工具CountDownLatch和CyclickBarrier?
《并发包下常见的同步工具类详解(CountDownLatch,CyclicBarrier,Semaphore)》:https://www.cnblogs.com/takumicx/p/9698867.html转载 2021-07-12 20:38:10 · 203 阅读 · 0 评论 -
24.介绍一下java.util.concurrent包里面的Atomic类及其原理?
《java.util.concurrent.atomic原理详解》:https://blog.csdn.net/li295214001/article/details/47257641转载 2021-07-12 20:38:04 · 73 阅读 · 0 评论 -
23.什么是阻塞队列?JAVA中阻塞队列有哪几种?
《到底什么是阻塞队列?有啥用?》:https://blog.csdn.net/youanyyou/article/details/114274935转载 2021-07-12 20:37:58 · 94 阅读 · 0 评论 -
22.ReetrantLock(重入锁)实现原理与公平非公平锁区别?
《ReentrantLock(重入锁)实现原理与公平锁非公平锁区别》:https://blog.csdn.net/ThinkWon/article/details/102469388转载 2021-07-12 20:37:51 · 73 阅读 · 0 评论 -
21.synchronized 和 ReentrantLock 区别是什么?
《synchronized 和 reentrantlock 区别是什么_面试官:谈谈synchronized与ReentrantLock的区别?》:https://blog.csdn.net/weixin_39714565/article/details/111365743转载 2021-07-11 18:35:28 · 94 阅读 · 0 评论 -
20.synchronized 和 volatile 的区别是什么?
1、Java语言为了解决并发编程中存在的原子性、可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchronized、volatile、final、concurren包等。(再有人问你Java内存模型是什么,就把这篇文章发给他)2、synchronized通过加锁的方式,使得其在需要原子性、可见性和有序性这三种特性的时候都可以作为其中一种解决方案,看起来是“万能”的。的确,大部分并发控制操作都能使用synchronized来完成。(再有人问你synchronized是什么,就把这篇文章发给转载 2021-07-11 18:35:21 · 242 阅读 · 0 评论 -
19.说一下 synchronized 底层实现原理?
《synchronized 底层实现原理?》:https://blog.csdn.net/meism5/article/details/90413871转载 2021-07-11 18:35:05 · 205 阅读 · 0 评论 -
18.ThreadLocal 是什么?有哪些使用场景?
《ThreadLocal 是什么?有哪些使用场景?》:https://blog.csdn.net/meism5/article/details/90413860转载 2021-07-12 20:38:54 · 113 阅读 · 0 评论 -
17.多线程锁的升级原理是什么?
《谈谈JVM内部锁升级过程》:https://www.bilibili.com/read/cv11972375/转载 2021-07-11 18:34:10 · 147 阅读 · 0 评论 -
16.在 java 程序中怎么保证多线程的运行安全?
《java 程序中怎么保证多线程的运行安全?》:https://blog.csdn.net/meism5/article/details/90266334转载 2021-07-11 18:33:43 · 136 阅读 · 0 评论 -
15.线程池中 submit()和 execute()方法有什么区别?
《线程池中 submit() 和 execute() 方法有什么区别?》:https://blog.csdn.net/qq_46138725/article/details/106721395转载 2021-07-11 18:33:30 · 146 阅读 · 0 评论 -
14.线程池都有哪些状态?
《线程池包含哪些状态?》: https://www.cnblogs.com/ConstXiong/p/11686292.html转载 2021-07-11 18:33:21 · 155 阅读 · 0 评论 -
13.JAVA中有哪几种线程池?
《java常用的几种线程池比较》: https://www.cnblogs.com/williamjie/p/9485723.html《java中常见的六种线程池详解》:https://www.cnblogs.com/i-code/p/13917733.html转载 2021-07-11 18:33:14 · 96 阅读 · 0 评论 -
12.notify()和notifyAll()有什么区别?
《notify()和notifyAll()有什么区别?》: https://www.cnblogs.com/ConstXiong/p/12009144.html转载 2021-07-11 18:33:05 · 219 阅读 · 0 评论 -
11.线程的sleep()方法、wait()方法、yield()方法各有什么用处?
《线程中sleep()方法和wait()方法、yield()方法的区别》:https://blog.csdn.net/qq_41447460/article/details/107920154转载 2021-07-11 18:32:56 · 57 阅读 · 0 评论 -
10.说一下 runnable 和 callable 有什么区别?
《Java Runnable与Callable区别》:https://www.cnblogs.com/kaituorensheng/p/9502968.html转载 2021-07-10 18:29:33 · 121 阅读 · 0 评论 -
9.守护线程是什么?
《面试官: 谈谈什么是守护线程以及做用 ?》:https://www.shangmayuan.com/a/50136aec206d456db87643ee.html转载 2021-07-10 18:24:08 · 124 阅读 · 0 评论 -
8.线程和进程有什么区别(简单介绍)?
《线程和进程有什么区别(简单介绍)》:https://blog.csdn.net/weixin_42981419/article/details/86162071转载 2021-07-10 18:16:01 · 57 阅读 · 0 评论 -
7.Iterator 怎么使用?有什么特点?
public interface Iterator<E> { boolean hasNext(); E next(); default void remove() { throw new UnsupportedOperationException("remove"); } default void forEachRemaining(Consumer<? super E> action)转载 2021-07-10 18:12:08 · 229 阅读 · 0 评论 -
6.java中哪些集合类是线程安全的?
《[整理] 哪些集合类是线程安全的?(Java)》:https://www.cnblogs.com/feily/articles/14015458.html转载 2021-07-10 18:06:14 · 114 阅读 · 0 评论 -
5.简述synchronized 和java.util.concurrent.locks.Lock的异同?
可重入ReentrantLock 和 syncronized 关键字一样,都是可重入锁,不过两者实现原理稍有差别, RetrantLock 利用 AQS 的的 state 状态来判断资源是否已锁,同一线程重入加锁,state 的状态 +1 ; 同一线程重入解锁, state 状态 -1 (解锁必须为当前独占线程,否则异常); 当 state 为 0 时解锁成功。需要手动加锁、解锁synchronized 关键字是自动进行加锁、解锁的,而 ReentrantLock 需要 lock() 和 un.转载 2021-07-10 17:59:41 · 85 阅读 · 0 评论 -
4.线程的基本状态以及状态之间的关系?
《https://blog.csdn.net/greywolf0824/article/details/85106014》:https://blog.csdn.net/greywolf0824/article/details/85106014转载 2021-07-10 17:43:53 · 65 阅读 · 0 评论 -
3.synchronized关键字的用法?
《Synchronized关键字的用法及解析》:https://www.jianshu.com/p/be224fdcbb24转载 2021-07-10 17:38:15 · 67 阅读 · 0 评论 -
2.编写多线程程序有几种实现方式?
《java多线程的6种实现方式详解》:https://blog.csdn.net/king_kgh/article/details/78213576转载 2021-07-10 17:25:07 · 127 阅读 · 0 评论 -
1.请说出与线程同步以及线程调度相关的方法?
《Java - 请说出与线程同步以及线程调度相关的方法。》转载 2021-07-10 17:10:27 · 203 阅读 · 0 评论