在Java中将锁转移到生成的线程

Bar*_*lom 2 java multithreading locking

有没有办法在Java中做这样的事情(可能使用Lock而不是synchronized):

synchronized(lock) {

     Thread t = spawnThread(new Runnable() {

         synchronized(lock) {
            doThing();
         }

     });

     transferLockOwnership(lock, t);

}
Run Code Online (Sandbox Code Playgroud)

具体来说,我想替换这样的代码:

    synchronized (lock) {

        sendResponse(response);

        doThingsAfterSending();

    }
Run Code Online (Sandbox Code Playgroud)

有这样的事情:

    synchronized (lock) {

        Thread t = spawnThread(new Runnable() { @Override public void run() {
            synchronized(lock) { doThingsAfterSending(); }
        }});

        transferLockOwnership(lock, t);

        return response;

    }
Run Code Online (Sandbox Code Playgroud)

Bri*_*128 5

您是否考虑过使用Semaphore1张许可证?例如

private Semaphore lock= new Semaphore(1);


// Instead of synchronized(lock)
lock.acquireUninterruptibly();

Thread t = spawnThread(new Runnable() {
  @Override public void run() {
    try {
      // Do stuff.
    } finally {
      lock.release();
    }
  }
});

t.start();
Run Code Online (Sandbox Code Playgroud)