小编R H*_*R H的帖子

Locks Map是一种安全的并发操作方法

要求是只允许单线程执行用户管理(创建/更新/导入)操作,但不允许多个线程同时为同一用户执行用户操作.例如,当线程A创建用户A时,同时不允许线程B导入用户A或创建用户A但允许线程B导入用户B.以下代码线程是否可以满足这些要求?

public class UserManagement {

    ConcurrentHashMap<Integer, Lock> userLock = new ConcurrentHashMap<>();

    public void createUser(User user, Integer userId) {
        Lock lock = userLock.putIfAbsent(userId, new ReentrantLock());
        try {
            lock.lock();
            //create user logic
        } finally {
            lock.unlock();
        }
    }

    public void importUser(User user, Integer userId) {
        Lock lock = userLock.putIfAbsent(userId, new ReentrantLock());
        try {
            lock.lock();
            //import user logic
        } finally {
            lock.unlock();
        }
    }

    public void updateUser(User user, Integer userId) {
        Lock lock = userLock.putIfAbsent(userId, new ReentrantLock());
        try {
            lock.lock();
            // update user …
Run Code Online (Sandbox Code Playgroud)

java multithreading locking

4
推荐指数
1
解决办法
494
查看次数

方法同步与对象同步有什么不同?

可能重复:
synchronized block vs synchronized方法?

如果有人能够帮助我找到方法同步和对象同步之间的不同之处的真实例子,那就太好了.

方法同步示例

public class MyClassExample {
private int i;
public synchronized void increment(){
    i = i + 1;
}
}
Run Code Online (Sandbox Code Playgroud)

对象同步示例

public class MyClassExample {
private int i;
Object writeLock = new Object();
 public void increment(){
    synchronized(writeLock) {
        i = i + 1;
    }
}
}
Run Code Online (Sandbox Code Playgroud)

java multithreading thread-safety thread-synchronization

2
推荐指数
1
解决办法
4922
查看次数

在Java中定义通用方法的最佳方法是什么?

我想在我的项目中定义泛型静态方法.要求是方法返回类型是方法参数之一.

以下是我的解决方案.

public static <T> List<T> convertMapToAttribute(Class<T> attrClass, T attr) {
    List<T> list = null;
    if (attrClass.equals(String.class)) {
        list = (List<T>) new ArrayList<String>();
        list.add(attr);
    } else if (attrClass.equals(Integer.class)) {
        list = (List<T>)new ArrayList<Integer>();
        list.add(attr);
    }
    return list;
 }
Run Code Online (Sandbox Code Playgroud)

我有两个问题.

  1. 我们可以在不添加@SuppressWarnings("未选中")的情况下避免这种警告"警告:[未经检查]未经检查的演员表"吗?
  2. 有没有其他优雅的方法来解决上述问题

java generics

1
推荐指数
1
解决办法
2403
查看次数

反正有没有找出当前正在使用该对象的线程数?

基本上我想知道当前有多少线程正在使用该对象.如果没有人使用此对象引用,那么我想销毁此对象.

 User u = new User();
 (here I have other code) 
 if (u is not used by any thread) {
   u = null;
 }
Run Code Online (Sandbox Code Playgroud)

java concurrency multithreading

1
推荐指数
1
解决办法
107
查看次数