Java疑问

Java集合疑问

Java多线程疑问

TIMED_WAITING与RUNNABLE状态转换

起源

Thread.sleep(long):
使当前线程睡眠指定时间。需要注意这里的“睡眠”只是暂时使线程停止执行,并不会释放锁。时间到后,线程会重新进入RUNNABLE状态。

Q

是否会出现一种情况,Thread.sleep(),然后线程带着锁去TIMED_WAITING了,然后其他线程也在等线程sleep结束,就是当前Runable状态下,明明cpu空闲,但是却都在等待TIMED_WAITING那边的锁释放?

A

Thread.sleep(long)可以在sychronized代码块中,调用此方法不释放对象锁;也可以不在sychronized代码块中。
如果是在sychronized代码块中,我认为会出现其他线程也在等线程TIMED_WAITING结束,等待锁释放

Redis分布式锁是什么?

如何解决 Redis 的并发竞争 Key 问题

所谓 Redis 的并发竞争 Key 的问题也就是多个系统同时对一个 key 进行操作,但是最后执行的顺 序和我们期望的顺序不同,这样也就导致了结果的不同!

解决方案 :分布式锁(zookeeper 和 redis 都可以实现分布式锁)。(如果不存在 Redis 的并 发竞争 Key 问题,不要使用分布式锁,这样会影响性能)

posted @ 2022-07-27 10:31  bourbonbote  阅读(29)  评论(0)    收藏  举报