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 问题,不要使用分布式锁,这样会影响性能)