并发编程测试题

发布时间:2014-06-20   来源:文档文库   
字号:
java并发面试题(基础
多线程
1. java中有几种方法可以实现一个线程?(参考答案
答: 1)继承Thread方法:Java线程类也是一个object,它的实例都继承自java.lang.Thread或其子类。 可以用如下方式用java中创建一个线程:
Tread thread = new Thread(; 执行该线程可以调用该线程的start(方法: thread.start(; 2)实现Runnable接口:
public class MyRunnable implements Runnable {
public void run({ System.out.println("MyRunnable running"; } } Thread thread = new Thread(new MyRunnable(; thread.start(;
2. 如何停止一个正在运行的线程?


答:使用共享变量的方式:代码中定义了一个退出标志exit,当exittrue时,while循环退出,exit的默认值为false在定义exit时,使用了一个Java关键字volatile
这个关键字的目的是使exit同步,也就是说在同一时刻只能由一个线程来修改exit的值。

3. notify(notifyAll(有什么区别?
答:void notify(: 唤醒一个正在等待该对象的线程。
void notifyAll(: 唤醒所有正在等待该对象的线程。
两者的最大区别在于:
notifyAll使所有原来在该对象上等待被notify的线程统统退出wait的状态,变成等待该对象上的锁,一旦该对象被解锁,他们就会去竞争。
notify他只是选择一个wait状态线程进行通知,并使它获得该对象上的锁,但不惊动其他同样在等待被该对象notify的线程们,当第一个线程运行完毕以后释放对象上的锁,此时如果该对象没有再次使用notify语句,即便该对象已经空闲,其他wait状态等待的线程由于没有得到该对象的通知,继续处在wait状态,直到这个对象发出一个notifynotifyAll它们等待的是被notifynotifyAll,而不是锁。

4. sleep( wait(有什么区别? 答:
这两个方法来自不同的类分别是ThreadObject 最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
waitnotifynotifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用(使用范围)
sleep必须捕获异常,而waitnotifynotifyAll不需要捕获异常



sleep(让一个线程休眠一段时间,能自动醒来进入到可运行状态,不会马上进入运行状态,wait(让一个线程等待直到线程被杀死或被唤醒。
5. 什么是Daemon线程?它有什么意义?

6. java如何实现多线程之间的通讯和协作?

1. 什么是可重入锁(ReentrantLock)?
2. 当一个线程进入某个对象的一个synchronized的实例方法后,其它线程是否可进入此对象的其它方法?
3. synchronizedjava.util.concurrent.locks.Lock的异同? 4. 乐观锁和悲观锁的理解及如何实现,有哪些实现方式?
并发框架
1. SynchronizedMapConcurrentHashMap有什么区别? 2. CopyOnWriteArrayList可以用于什么应用场景?
线程安全
1. 什么叫线程安全?servlet是线程安全吗? 2. 同步有几种实现方法?
3. volatile有什么用?能否用一句话说明下volatile的应用场景? 4. 请说明下java的内存模型及其工作流程。 5. 为什么代码会重排序?

java并发面试题(实战


本文列出了在工作中会用到的并发编程的实战问题,大家可以一起交流下,在回复中给出答案。
并发容器和框架
1. 如何让一段程序并发的执行,并最终汇总结果?
2. 如何合理的配置java线程池?如CPU密集型的任务,基本线程池应该配置多大?IO集型的任务,基本线程池应该配置多大?用有界队列好还是无界队列好?任务非常多的时候,使用什么阻塞队列能获取最好的吞吐量?
3. 如何使用阻塞队列实现一个生产者和消费者模型?请写代码。
4. 多读少写的场景应该使用哪个并发容器,为什么使用它?比如你做了一个搜索引擎,搜索引擎每次搜索前需要判断搜索关键词是否在黑名单里,黑名单每天更新一次。
Java中的锁
1. 如何实现乐观锁(CAS)?如何避免ABA问题? 2. 读写锁可以用于什么应用场景? 3. 什么时候应该使用可重入锁?
4. 什么场景下可以使用volatile替换synchronized
并发工具
1. 如何实现一个流控程序,用于控制请求的调用次数?
答案
可以阅读以下参考资料,知道答案后可以在回复中交流

Java线程池的分析和使用 Java线程池(第二题) 原子操作的实现原理 (锁 第一题) Java中的读写锁(锁 第二题)
如何设计客户端流控程序 (并发工具 第一题) 待续 (全文完)


本文来源:https://www.2haoxitong.net/k/doc/64082455e87101f69e3195a5.html

《并发编程测试题.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式