博主将会针对Java面试题写一组文章,包括J2ee,SQL,主流Web框架,中间件等面试过程中面试官经常问的问题,欢迎大家关注。一起学习,一起成长。
疑问
在上一节文章中【详细解答可参考上一篇文章简易redis客户端】,我们遗留了两个Socket多线程不安全的问题,在高并发场景下,这种请求会出现请求丢失或请求嵌套,会导致严重问题。如:
1. 当多线程同时发送报文时,由于发送不是原子的,对方接收到的报文势必为混乱的。
例如线程1发送"*2 $3 GET hello_cli";
线程2发送"*2 $3 GET hI_cli";
redis服务端收到的可能是"*2 *2 $3 GET hI_cli $3 GET hello_cli"。
2. 当线程接收时,由于一次发送不对应一次接收,将导致你无法处理。
例如redis服务端发送两个报文"+OK", "+OK";
一个线程可能接收到"OK",另外一个则收到"+OK+"。
这