并发编程面试题汇总

并发编程

Thread.currentThread()方法来获取系统当前正在执行的一条线程,
多线程:怎么实现线程安全,各个实现方法有什么区别,volatile关键字的使用,可重入锁的理解,Synchronized是不是可重入锁?

https://www.cnblogs.com/baizhanshi/p/7211802.html
ReenTrantLock的字面意思就是再进入的锁,其实synchronized关键字所使用的锁也是可重入的,两者关于这个的区别不大。两者都是同一个线程没进入一次,锁的计数器都自增1,所以要等到锁的计数器下降为0时才能释放锁。

多线程了解多少啊?使用多线程会有什么问题?你是怎么理解“线程安全”的?
进程和线程的区别?
线程生命周期 线程状态
如何结束一个一直运行的线程?
Java内存模型 CAS 原子操作 volatile内存语义 功能
Java多线程方面问的比较多 重排序 结合多场景问是否发生重排序 线程池构建 线程复用?
类锁 对象锁 静态锁 结合多场景提问?
ContextClassLoader(线程上下文类加载器)的作用?
synchronized关键字来说一下,它的用途是什么?synchronized底层的原理是什么?
产生死锁的条件是什么?我们可以如何避免死锁?(可延伸到操作系统层面上的死锁)?
ThreadLocal你了解过吗?主要是用来干什么的?具体的源码实现原理来说一下吧
threadlocal使用场景及问题?
Volatile synchronized 实现同步的其他方式 ReenTrantLook等?
synchronized锁和ReentrantLock锁有什么区别呀?

https://blog.csdn.net/weixin_40792878/article/details/81369385

concurrenthashmap为何读不用加锁?

在jdk1.8中ConcurrentHashMap底层采用了Node+CAS+Synchronized来保证线程安全(1.7使用分段加锁实现)
get操作时无锁是由于Node元素的val和指针next是用volatile修饰的,在多线程情况下线程A修改节点或者新增节点都是对线程B可见的。
Node数组也使用volatile修饰主要是保证在数组扩容的时候保证可见性。

线程安全的容器有哪些?(着重于ConcurrentHashMap、CopyWriteOnArrayList与其他非线程安全容器的区别以及它们的具体实现)
阻塞队列BlockingQueue take和poll区别?
如何从FutureTask不阻塞获取结果?
blockingqueue如果存放了比较关键的数据,系统宕机该如何处理?
如果我现在想要某个操作等待线程结束之后才执行,有什么方法可以实现?为什么要用CountDownLatch?CountDownLatch的底层是什么?(引出AQS)
让我设计一个线程池?
线程池从启动到工作的流程?
线程池你应该也看过吧,来说说为什么要用线程池。JDK默认实现了几个线程池,分别有xxx(自然地ThreadPoolExecutor构造函数的常用几个参数你也得一起说出来)

猜你喜欢

转载自blog.csdn.net/qq_36741161/article/details/88788681