关于synchronized 全局转分部

问题描述

现有一全局的synchronized 如下:Object lock = new Object(); synchronized(lock){ .... } 调用的都是不同的用户,现是全局synchronized ,所以用户都要排队,但是只需同一用户并发是排队调用即可。如何把全局的改成按用户synchronized 的流程。提供一下思路 问题补充:现在是通过Object ,只有用户id传入, 如果用map如何实现锁

解决方案

1、维护一个锁列表 2、根据用户id获取锁,同一个id每次获取都返回同一把锁
解决方案二:
引用1、维护一个锁列表 2、根据用户id获取锁,同一个id每次获取都返回同一把锁这个列表,需要在用户登出后,清理相应的锁,不然有可能内存泄露(主要看你的UserID设计)。
解决方案三:
同一个用户那就先判断下//获取当前操作的userUser user = context.getUsesr();User lockedUser = Application.get();//设计成全局唯一的实例-singleton//如果是同一个用户加lockif(lockedUser!=null && user.equlas(lockedUser)){ synchronized(lock){ business(); }}else if(lockedUser == null){//没有用户获取lock的时候 synchronized(lock){ lockedUser = user; business(); }}else{ business();//不需要加lock}

时间: 2024-10-21 18:12:39

关于synchronized 全局转分部的相关文章

android-Android 自己写的一个全局事件管理器,感觉还有点儿问题,提上代码,希望大神们修改修改!!!

问题描述 Android 自己写的一个全局事件管理器,感觉还有点儿问题,提上代码,希望大神们修改修改!!! import java.util.ArrayList; import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import android.os

聊聊并发(二)Java SE1.6中的Synchronized

本文属作者原创,原文发表于InfoQ:http://www.infoq.com/cn/articles/java-se-16-synchronized 1 引言 在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化之后,有些情况下它并不那么重了,本文详细介绍了Java SE1.6中为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁,以及锁的存储结构和升级过程. 2 术语定义 术语 英

Java多线程编程中synchronized线程同步的教程_java

0.关于线程同步 (1)为什么需要同步多线程?线程的同步是指让多个运行的线程在一起良好地协作,达到让多线程按要求合理地占用释放资源.我们采用Java中的同步代码块和同步方法达到这样的目的.比如这样的解决多线程无固定序执行的问题: public class TwoThreadTest { public static void main(String[] args) { Thread th1= new MyThread1(); Thread th2= new MyThread2(); th1.sta

Android中捕获全局异常实现代码_Android

1.实现UncaughtExceptionHandler,在方法uncaughtException中处理没有捕获的异常. public class GlobalException implements UncaughtExceptionHandler { private final static GlobalException myCrashHandler = new GlobalException(); private GlobalException() { } public static s

Android UncaughtExceptionHandler进行全局异常捕获

        在实际开发过程中,我们的APP由于各种原因,难免会有Crash现象(应用程序XXX已经停止).这样给用户一种很不友好的感觉,那么我们如何去处理这种情况呢?答案就在实现UncaughtchExceptionHanlder,复写uncaughtException()方法.         当crash发生的时候,系统会调用UncaughtchExceptionHanlder#uncaughtException().在uncaughtException()中我们可以选择收集错误信息,然

java-关于自己用一个全局map实现ThreadLocal遇到的错误

问题描述 关于自己用一个全局map实现ThreadLocal遇到的错误 先上代码吧. package thread; import java.util.HashMap; import java.util.Map; import java.util.Random; /** * 这样的map属于全局级别的,会冲突,而且这样的实现方法好像是1.3以前的方法 * @author Han */ public class MyThreadLocalDemo { private static Map<Thre

多线程 同步 信号量-如果synchronized(new Object){} 和 Object obj = new Object(); synchronized(obj){}的区别是什么?

问题描述 如果synchronized(new Object){} 和 Object obj = new Object(); synchronized(obj){}的区别是什么? 如果synchronized(new Object){} 和 Object obj = new Object(); synchronized(obj){}的区别是什么? 主要是在synchronized()中放new Object 是四个线程一起,而放obj对象是一个一个的执行,这是什么原因呢? 代码: class X

java-Java 多线程问题 synchronized(obj)的疑惑

问题描述 Java 多线程问题 synchronized(obj)的疑惑 是这样的,我想知道synchronized(obj)的用法,然后写了如下的代码,运行结果我如何都搞不清,还请各位指点. 代码1: public class MyObj { private Integer a; private Double b; private Integer c; public void setA() { System.out.println(Thread.currentThread().getName(

java-关于Java的synchronized使用问题

问题描述 关于Java的synchronized使用问题 public class SynchronizedExcercises { public static void main(String[] args) { // TODO Auto-generated method stub MyRunnabe myRunnabe = new MyRunnabe(); Thread thread1 = new Thread(myRunnabe); thread1.start(); myRunnabe.m