Java并发编程基础

来源:互联网 发布:韩庚 王凯 知乎 编辑:程序博客网 时间:2024/05/21 09:09
多线程

1、java中有几种方法可以实现一个线程?
extends Thread
implement Runnable

2、如何停止一个正在运行的线程?
isStopFlage = false;
interrupt();

3、notify()和notifyAll()有什么区别?
notify() 随机唤醒阻塞的线程。
notifyAll() 唤醒所有的阻塞线程。

4、sleep()和 wait()有什么区别?
sleep() 在不释放资源的情况下,对线程进行休眠
wait() 调用会使得线程挂起,并且释放同步锁资源。只有等另外一个线程调用notify()后,才能实现对线程的唤醒。

5、什么是Daemon线程?它有什么意义?

守护线程: 当系统中其他用户线程都被销毁的时候,才被销毁。
在JVM中垃圾回收线程就是一个典型的守护线程,一直在运行。知道JVM中其他线程都被回收。

6、java如何实现多线程之间的通讯和协作?
线程之间的通信方式:
共享内存
notify() 和 wait()
lock()和condition()

7、什么是可重入锁(ReentrantLock)?

8、当一个线程进入某个对象的一个synchronized的实例方法后,其它线程是否可进入此对象的其它方法?

9、synchronized和Lock的异同?
synchronized 是一个关键字,并不是一个接口或者类。其作用简单,只是实现

10、乐观锁和悲观锁的理解及如何实现,有哪些实现方式?

乐观锁: 乐观的认为每次获取数据的时候,都不会被其他人修改,所以不需要加锁,只采用添加一个版本号字段来实现。悲观锁:悲观的认为每次获取数据的时候,都会被其他人修改,所以给数据加上锁。加上锁后,性能就受影响了。并发框架

11、SynchronizedMap和ConcurrentHashMap有什么区别?
CopyOnWriteArrayList可以用于什么应用场景?

线程安全

12、什么叫线程安全?servlet是线程安全吗?
13、同步有几种实现方法?
14、volatile有什么用?能否用一句话说明下volatile的应用场景?
请说明下java的内存模型及其工作流程。
15、为什么代码会重排序?

并发容器和框架

16、如何让一段程序并发的执行,并最终汇总结果?
17、如何合理的配置java线程池?如CPU密集型的任务,基本线程池应该配置多大?IO密集型的任务,基本线程池应该配置多大?用有界队列好还是无界队列好?任务非常多的时候,使用什么阻塞队列能获取最好的吞吐量?
18、如何使用阻塞队列实现一个生产者和消费者模型?请写代码。
19、多读少写的场景应该使用哪个并发容器,为什么使用它?比如你做了一个搜索引擎,搜索引擎每次搜索前需要判断搜索关键词是否在黑名单里,黑名单每天更新一次。

Java中的锁

20、如何实现乐观锁(CAS)?如何避免ABA问题?
21、读写锁可以用于什么应用场景?
22、什么时候应该使用可重入锁?
23、什么场景下可以使用volatile替换synchronized?
24、什么是自旋锁,使用于什么场景?

并发工具

25、如何实现一个流控程序,用于控制请求的调用次数?

阻塞队列

26、如何使用数组或者List实现一个阻塞队列?

并发API

27、对FutureTask 类的理解?

原创粉丝点击