首页 > 房产

java中synchronized和ReentrantLock的加锁和解锁能在不同线程吗?如果能,如何实现?|天天热推荐

来源:博客园 时间:2023-06-22 14:18:38

java中synchronized和ReentrantLock的加锁和解锁能在不同线程吗?如果能,如何实现?

答案2023-06-21:

java的:

这个问题,我问了一些人,部分人是回答得有问题的。synchronized这是个关键字,加锁和解锁不是直接用代码实现,所以在代码层面上就杜绝了加锁和解锁不在同一个线程得情况。可以这么说,synchronized是无法实现同一把锁的加锁和解锁在不同线程。


(资料图)

ReentrantLock的加锁和解锁,是在代码层面实现的,所以是可以写出这样的代码,如下:

package com.hikvision;import java.util.concurrent.locks.ReentrantLock;public class Application {    private static ReentrantLock lock = new ReentrantLock();    public static void main(String[] args) {        // 线程1加锁        Thread thread1 = new Thread(() -> {            lock.lock();            try {                System.out.println("Thread 1 lock.");            } finally {                lock.unlock();            }        });        // 线程2解锁        Thread thread2 = new Thread(() -> {            lock.unlock();            System.out.println("Thread 2 unlock.");        });        thread1.start();        try {            Thread.sleep(1000); // 等待1秒,确保线程1先执行        } catch (InterruptedException e) {            e.printStackTrace();        }        thread2.start();        try {            Thread.sleep(1000); // 等待1秒,确保线程2先执行        } catch (InterruptedException e) {            e.printStackTrace();        }    }}

运行结果如下:

根据运行结果可以看出,ReentrantLock的加锁和解锁在代码层面上可以实现,但是运行会报异常。说明ReentrantLock不支持同一把锁的加锁和解锁能在不同线程。

综上所述:java中synchronized和ReentrantLock的加锁和解锁不能在不同线程。

go的:

go的sync.Mutex的加锁和解锁能在不同协程吗?如果能,如何实现?

sync.Mutex的加锁和解锁,是在代码层面实现的,所以是可以写出这样的代码,如下:

package mainimport ("fmt""sync""time")func main() {// 加锁和解锁可以不在同一个协程var m sync.Mutexm.Lock()fmt.Println("加锁成功")go func() {time.Sleep(time.Second * 5)m.Unlock()fmt.Println("解锁成功")}()time.Sleep(time.Hour)}

根据运行结果可以看出,sync.Mutex的加锁和解锁在代码层面上可以实现,运行也正常。说明sync.Mutex支持同一把锁的加锁和解锁能在不同协程。

综上所述:go中sync.Mutex的加锁和解锁能在不同线程。

总结:

java中synchronized和ReentrantLock都是可重入锁,所以在线程上的加锁和解锁会做限制,加锁和解锁必须在同一线程,并且成对出现。

go的sync.Mutex是不可重入锁,所以在协程上的加锁和解锁没做限制。加锁和解锁可以不在同一协程,但要成对出现。

相关稿件

java中synchronized和ReentrantLock的加锁和解锁能在不同线程吗?如果能,如何实现?|天天热推荐

当前短讯!百诺医药IPO:3年利润6000多万拟募资10亿,片仔癀等是客户

铝2a12和6061的区别(2a12是什么材料)_焦点

苹果手机丢了怎么找回通讯录(苹果手机丢了怎么找回)

北向资金净卖出6.41亿元,宁德时代、立讯精密等获加仓-环球视讯

环球聚焦:驾驶证年龄怎么算

世界热头条丨文末有奖丨干货!连接器选型大全

全球新动态:俄国防部长:“西方国家在对俄罗斯发动一场真正的战争”

交通部门增运力 保障端午假日出行

每日观察!安逸花逾期3年了真还不上怎么办?被起诉还可以协商吗?

美财长自相矛盾,要在国际金融机构封堵中国,暴露了背后的恐慌|当前热闻

实控人前妻拟套现超22亿元,昆仑万维股价“巨震”大跌20%-每日热点

武信“诗人”辅导员再送走心毕业礼

精彩看点:温州瓯海农商银行又被查!此前曾被罚款245万!

煌煌的意思_煌煌

快播:最懂得“报恩”的3种猫,忠诚度并不比狗差,看看你家养的是不是

每日简讯:《超人:传承》选角进行中 滚导:试镜者都很棒

手抄报是什么应该怎么写_手抄报是什么_焦点速读

【天天播资讯】理事单位和会员单位的区别_理事单位是什么意思

桌面文件删不了怎么回事(桌面文件删不了 怎么办) 世界快讯

安卓手机微信聊天记录怎么恢复?_安卓手机微信聊天记录怎么恢复-天天观速讯

12306列车运行图调整要多久_列车运行图调整要多久

影片《我爱你!》票房破3000万_环球头条

女子和局长的聊天记录雷人:老公,你上来要是我睡着了,请弄醒我 每日聚焦

湖人新赛季季前赛赛程公布:10月8日对阵勇士

环球焦点!钥匙放车内遭顺手牵“车”,开平警方12小时火速追回

加拿大空军一直升机坠河致两人失踪_环球最新

三家合作,开发下一代氨发动机 环球热文

菲仕乐高压锅炖牛肉一般多长时间?-环球热点

全球球精选!hyperpay钱包使用教程_hyper v怎么使用