Java多线程习题解

Java多线程习题解

一、问题:

      1>.现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?

      2>.在Java中Lock接口比synchronized块的优势是什么?你需要实现一个高效的缓存,它允许多个用户读,但只允许一个用户写,以此来保持它的完整性,你会怎样去实现它?

      3>.在java中wait和sleep方法的不同?

      4>.用Java实现阻塞队列。

      5>.用Java写代码来解决生产者——消费者问题。

      6>.用Java编程一个会导致死锁的程序,你将怎么解决?

      7>.什么是原子操作,Java中的原子操作是什么?

      8>.Java中的volatile关键是什么作用?怎样使用它?在Java中它跟synchronized方法有什么不同?

      9>. 什么是竞争条件?你怎样发现和解决竞争?

      10)>.你将如何使用thread dump?你将如何分析Thread dump?

      11>. 为什么我们调用start()方法时会执行run()方法,为什么我们不能直接调用run()方法?

      12>.Java中你怎样唤醒一个阻塞的线程?

      13>.在Java中CycliBarriar和CountdownLatch有什么区别?

      14>.什么是不可变对象,它对写并发应用有什么帮助?

      15>.你在多线程环境中遇到的常见的问题是什么?你是怎么解决它的?

二、答案&参考答案:

1>.使用join方法。

2>.ReadWriteLock适用于读多写少的并发场景

3>.等待时wait会释放锁,而sleep一直持有锁Wait通常被用于线程间交互sleep通常被用于暂停执行

4>.wait()和notify()

5>.参见同步锁:生产者-消费者问题

6>.参见Multi-threaded design patterns -- Single Threaded Execution

7>.原子操作是不可分割的,从运行开始到结束,中间不会切换到另一线程

8>.参见Java Concurrency in Practice :基础知识(重排序与可见性)

9>.当多个进程或者线程在读写数据时,其最终的的结果依赖于多个进程的指令执行顺序。最后更新的进程决定变量的最终值

11>.start()方法是创建一个线程开始执行(与主线程同步),run()方法是创建一个线程(在主线程结束之后)开始执行

12>.notify()或者通过对InterruptedException的处理

14>.private final 属性,并不提供set方法,无法从类的外部改变该属性的值,一旦初始化便不可更改称为不可变对象(具体可参见Java中String为什么是不可变的)

第10、13、15参考答案:15个顶级Java多线程面试题及回答

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值