0 0

关于synchronized 全局转分部5

现有一全局的synchronized

如下:
Object lock = new Object();
synchronized(lock){
        ....
  }

调用的都是不同的用户,现是全局synchronized ,所以用户都要排队,但是只需同一用户并发是排队调用即可。

如何把全局的改成按用户synchronized 的流程。

提供一下思路

问题补充:现在是通过Object ,只有用户id传入, 如果用map如何实现锁
2013年1月07日 22:24

3个答案 按时间排序 按投票排序

0 0

采纳的答案

1、维护一个锁列表
2、根据用户id获取锁,同一个id每次获取都返回同一把锁

2013年1月08日 09:04
0 0

引用

1、维护一个锁列表
2、根据用户id获取锁,同一个id每次获取都返回同一把锁


这个列表,需要在用户登出后,清理相应的锁,不然有可能内存泄露(主要看你的UserID设计)。

2013年1月09日 10:23
0 0

同一个用户那就先判断下
//获取当前操作的user
User user = context.getUsesr();
User lockedUser = Application.get();//设计成全局唯一的实例-singleton

//如果是同一个用户加lock
if(lockedUser!=null && user.equlas(lockedUser)){
  synchronized(lock){
    business();
  }
}else if(lockedUser == null){//没有用户获取lock的时候
  synchronized(lock){
    lockedUser = user;
    business();
  }
}else{
  business();//不需要加lock
}

2013年1月08日 08:55

相关推荐

    ReentrantLock与synchronized

    - 在高并发环境下,`ReentrantLock`的性能通常优于`synchronized`,因为它可以避免全局的Monitor竞争。 总结来说,`synchronized`适用于简单的同步需求,而`ReentrantLock`在需要更细粒度控制、中断锁、公平性等...

    synchronized与单例的线程安全

    单例模式是一种设计模式,保证一个类只有一个实例,并提供全局访问点。在多线程环境中,如果不采取措施,可能会创建多个实例,导致资源浪费和逻辑错误。有多种实现单例的方式,其中线程安全的实现包括: 1. 饿汉式...

    透彻理解Java中Synchronized(对象锁)和Static Synchronized(类锁)的区别

    Static Synchronized 是一种全局锁,它锁定的是该类的所有实例。无论该类有多少个实例,Static Synchronized 都会锁定该类的所有实例,使得多个线程不能同时访问该类的同一个 synchronized 块。 Static ...

    通过全局对象传递数据

    public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } public void setData(String data) { this.data = data; } ...

    synchronized与static synchronized的区别

    大家在学习java多线程的时候肯定会遇到这个...static synchronized这个是“全局锁”或者是“类锁”,该锁针对的是类,不管实例了多少个对象,线程都共享该锁。 下面我们来看代码: import java.util.concurrent.TimeUni

    实例解析Java中的synchronized关键字与线程平安问题_.docx

    synchronized() 中是锁住的对象,synchronized(this) 锁住的只是对象本身,同一个类的不同对象调用这个方法并不会被锁住,而 synchronized(className.class) 实现了全局锁的功能,全部这个类的对象调用这个方法都受...

    iPhone开发全局变量的使用

    @synchronized(self) { if (instance == nil) { instance = [[Singleton alloc] init]; } } return instance; } - (id)init { self = [super init]; if (self) { sharedString = @"Singleton中的全局...

    【ASP.NET编程知识】实例解析Java中的synchronized关键字与线程安全问题.docx

    在Java编程中,`synchronized`关键字是用来解决多线程环境下的线程安全问题的关键工具。线程安全意味着当多个线程访问同一段代码时,该代码能够正确地处理并发情况,不会出现数据不一致或者资源竞争的问题。本文将...

    Java并发 synchronized锁住的内容解析

    当多个线程对同一个对象的实例变量或者全局静态变量进行并发访问时,如果不做正确的同步处理,那么产生的后果就是"脏读",也就是取到的数据其实是被更改过的。 synchronized用在方法上锁住的是当前对象的当前方法,...

    Java中的关键字synchronized 详解

    更新失败表明存在锁竞争,等待全局安全点,暂停拥有偏向锁的线程,根据对象头的锁标志位,选择将偏向锁升级为轻量锁或者置为无锁。 轻量锁 轻量锁是Java 6中引入的一种锁机制,它的目的是为了减少竞争的情况下的锁...

    Java 中 synchronized的用法详解(四种用法)

    这种用法适用于需要在整个类级别进行同步的情况,例如管理类的全局状态。 理解 `synchronized` 的工作原理和用法对于编写线程安全的 Java 代码至关重要。然而,过度使用 `synchronized` 可能会导致性能下降,因为...

    android 创建全局实例

    可以使用`synchronized`关键字或`Lock`来同步访问。 - **替代方案**:对于简单的数据共享,可以考虑使用静态变量或Android的`SharedPreferences`。对于复杂的数据共享,推荐使用`Singleton`模式,或者使用`LiveData...

    java多线程编程之使用Synchronized关键字同步类方法

    在设计模式中,单例模式是一种常见模式,其目的是确保一个类只有一个实例并提供全局访问点。传统的单例模式在多线程环境下可能存在线程安全问题。以下是一个线程不安全的单例模式实现: ```java class Singleton { ...

    Android 全局异常捕获实例详解

    synchronized (CrashHandler.class) { if (instance == null) { instance = new CrashHandler(); } } } return instance; } public void init(Context context) { this.context = context....

    java基本教程之synchronized关键字 java多线程教程

    - **全局锁**:全局锁是针对类的所有实例共享的,当synchronized作用于静态方法或静态代码块时,就使用全局锁,这意味着无论有多少个实例,同一时间只能有一个线程执行这个静态方法或静态代码块。 理解并正确使用...

    Java理论与实践:构建一个更好的HashMap

    `ConcurrentHashMap`的关键优化在于它摒弃了传统的全局锁,转而采用了一种分段锁策略。它使用了32个独立的锁,每个锁负责保护哈希桶的一个子集,这种设计允许最多32个线程同时修改哈希映射。即使实际并发线程数小于...

    java多线程编程之Synchronized关键字详解

    这种全局的同步可能会降低程序的并发性能,尤其是在没有共享数据的情况下。因此,为了提高效率,开发者应尽可能缩小锁的范围,只锁定真正需要同步的部分。 总结来说,`Synchronized`关键字在Java多线程编程中起到...

    实例解析Java中的synchronized关键字与线程安全问题

    在Java编程语言中,`synchronized`关键字是用于处理多线程环境下的线程安全问题的关键工具。它确保同一时间只有一个线程可以执行特定的代码块或方法,从而避免数据竞争和其他并发问题。本文将通过实例解析`...

    jvm细节探索之synchronized及实现问题分析

    每个线程有一个可用MonitorRecord列表,以及全局可用列表,用于管理线程间的锁关系。 总的来说,`synchronized`在JVM中的实现涉及到字节码指令、锁优化策略和对象头的设计,这些机制共同确保了Java多线程环境下的...

Global site tag (gtag.js) - Google Analytics