请教一个关于java锁的问题,synchronized和lock的区别

pjlopjlo 2017-05-09 05:05:39
我现在代码有一个同步是用synchronized做的,但是由于同步代码段内部经常会卡死,导致这个同步段执行卡住。
synchronized(bizProxy){代码段},其中bizProxy为一个静态类。
现在想把syn控制的同步改成lock形式,不知道该怎么写?
此外,如果想实现如果代码段执行超时,则释放该锁,可以实现吗?
...全文
353 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
码匠笔记 2019-01-11
  • 打赏
  • 举报
回复
我觉得解决你这个问题不应该是使用Lock来解决,很多时候sync和lock其实都是可以解决问题的,反到 lock 需要自己释放锁。 我倒是觉得你可以考虑一下为什么你这个地方会卡主,从两点出发。 1,思考降低锁的力度,比如synchronized(businessid),businessId是你传递过来的业务ID,这样不互相干预的线程不会互相Block 2,思考异步解决这个问题,如果你的逻辑允许。 如果你想尝试Lock的方法很简单,下面代码是两种实现方式

public class SyncTest {
    public static void main(String[] args) {
        fun1("hello");
        fun2("world");
    }

    private static void fun2(String world) {
        Lock lock = new ReentrantLock();
        try {
            lock.lock();
        } finally {
            lock.unlock();
        }
    }

    private static void fun1(String businessId) {
        synchronized (businessId) {
            System.out.println(businessId);
        }
    }

}
小编为订阅号「码匠笔记」号主,先后就职于 ThoughtWorks、阿里巴巴等互联网公司的经验分享,包含但不限于 JAVA、并发编程、性能优化、架构设计、小程序、开源软件等。有兴趣可以关注一波,一起学习、讨论。
pjlopjlo 2017-05-09
  • 打赏
  • 举报
回复
一直不太明白,syn同步是对对象加锁,lock到底锁的是什么,是代码段还是代码段所在的类呢?求指点
hello_world_wsm 2017-05-09
  • 打赏
  • 举报
回复
也许这个对你有用 http://blog.csdn.net/yangzhaomuma/article/details/51236976
pjlopjlo 2017-05-09
  • 打赏
  • 举报
回复
ReentrantLock lock = new ReentrantLock(); if (lock.tryLock()) { try {代码段} finally{ lock.unlock(); }} else {System.out.println("*************获取锁超时*****************");} 这么写好像并没有控制住这段代码对poxy静态类的使用,仔细看了一下,两个访问这段代码的请求生成了两个锁,并没有产生互斥。
源码直接下载地址: https://pan.quark.cn/s/1152bb0f4efb 在信息技术领域中,设计出高效且具备良好扩展性的分布式服务架构是企业级应用开发的核心要素。Spring Boot、HSF(High Speed Service Framework)以及EDAS(Enterprise Distributed Application Service)是阿里巴巴公司推出的有力工具,它们能够辅助开发者迅速构建并部署分布式服务。下面将详细分析这些技术,并阐释如何运用它们达成发布订阅模式的构建。Spring Boot是由Pivotal团队研发的Java框架,其目的是简化独立且生产级的基于Spring应用程序的创建流程。Spring Boot的关键特性在于其自动配置机制,该机制能够依据所依赖的库自动设定Spring应用的相关配置,从而显著降低常规的配置工作量。不仅如此,Spring Boot内嵌了Tomcat服务器,使得开发者能够迅速启动一个Web应用,而无需单独处理服务器的管理事宜。HSF,即High Speed Service Framework,是阿里巴巴公司内部普遍采用的高性能RPC框架。HSF支持服务治理的多个方面,包括服务注册、服务发现、负载均衡、熔断机制以及服务降级等,为微服务架构奠定了坚实的基础。HSF通过定义接口、明确服务提供者和服务消费者之间的角色分工,使得服务间的调用过程变得简单且清晰。EDAS,全称为Enterprise Distributed Application Service,是阿里巴巴云提供的PaaS平台,它提供了全方位的服务治理功能,例如服务注册与发现、配置管理、监控与告警等。通过整合HSF,开发者可以将EDAS用作服务注...

81,115

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧