Java面试题

一、项目面试题-消息队列

背景:在分布式系统中是如何处理高并发的。

       由于在高并发的环境下,来不及同步处理用户发送的请求,则会导致请求发生阻塞。比如说,大量的insert,update之类的请求同时到达数据库MYSQL,直接导致无数的行锁表锁,甚至会导致请求堆积很多。从而触发 too many connections 错误。使用消息队列可以解决【异步通信】

1、异步

Java面试题_第1张图片

2、并行

3、排队

消息队列的弊端;

       消息的不确定性:延迟队列,轮询技术来解决该问题即可!

二、可重入锁

可重入锁又名递归锁

是指在同一个线程在外层方法获取锁的时候,再进入该线程的内层方法会自动获取锁(前提,锁对象得是同一个对象),不会因为之前已经获取过还没释放而阻塞。

Java中ReentrantLock和synchronized都是可重入锁,可重入锁的一个优点是可一定程度避免死锁。

三、LockSupport

1、LockSupport是用于创建锁和其他同步类的基本线程阻塞原语

2、线程等待唤醒机制(wait/notify)

①、3种让线程等待和唤醒的方法

方式1:使用Object中的wait()方法让线程等待,使用Object中的notify()方法唤醒线程

方式2:使用JUC包中Condition的await()方法让线程等待,使用signal()方法唤醒线程

方式3:LockSupport类可以阻塞当前线程以及唤醒指定被阻塞的线程

②、Object类中的wait和notify方法实现线程等待和唤醒

3、LockSupport中的park()和unpark()的作用分别是阻塞线程和解除阻塞线程

你可能感兴趣的:(Java面试题,java,开发语言)