Java synchronizing based on a parameter (named mutex/lock)

后端 未结 8 1799
逝去的感伤
逝去的感伤 2020-12-05 02:50

I\'m looking for a way to synchronize a method based on the parameter it receives, something like this:

public synchronized void doSomething(name){
//some co         


        
8条回答
  •  一个人的身影
    2020-12-05 03:21

    I've used a cache to store lock objects. The my cache will expire objects after a period, which really only needs to be longer that the time it takes the synchronized process to run

    `

    import com.google.common.cache.Cache;
    import com.google.common.cache.CacheBuilder;
    
    ...
    
    private final Cache mediapackageLockCache = CacheBuilder.newBuilder().expireAfterWrite(DEFAULT_CACHE_EXPIRE, TimeUnit.SECONDS).build();
    
    ...
    
    public void doSomething(foo) {
        Object lock = mediapackageLockCache.getIfPresent(foo.toSting());
        if (lock == null) {
            lock = new Object();
            mediapackageLockCache.put(foo.toString(), lock);
        }
    
        synchronized(lock) {
            // execute code on foo
            ...
        }
    }
    

    `

提交回复
热议问题