Discuss / Java / 想请教下廖老师,Java中的这些锁在实际开发中用的多吗?

想请教下廖老师,Java中的这些锁在实际开发中用的多吗?

Topic source

我个人的理解是,现在项目一般都是多台应用服务器组合的集群,操作的资源一般也是这些应用服务器共享的资源,比如数据库,MQ,Redis。所以对资源进行加锁时,不止要考虑同一个进程中的多个线程的并行执行,还要考虑多个进程,以及多个机器的并行执行。所以要用分布式锁。在我有限的经验中,一般会用到数据库的锁,比如用它的unique键保证唯一性,以及在数据库上用乐观锁,还有用Redis当分布式锁。

当然,只考虑一个进程上的多个线程的并行执行,需要用到线程级的互斥锁,读写锁,乐观锁。根据我有限的经验,线程锁的使用场景有两个:第一:执行一些脚本时,在一个进程内启多个线程。第二:在一个进程内使用共享的内存资源,如队列等,不过,锁已经内置在队列的实现中了。而这两种场景在开发中的占比都比较低。

从另外一个角度看,对于从事开发数据库,MQ,Redis等这些存储系统的人,倒是会大量使用到这些线程锁。

fqjx

#2 Created at ... [Delete] [Delete and Lock User]

不懂,顶一个,希望更多有经验的大佬来分享对线程锁的使用场景的观点和看法。

值得注意的是:StampedLock 虽然支持序列化,但是在反序列化的时候无法恢复锁的状态,所以无法进行远程加锁


  • 1

Reply