import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;
public class Main {
public static void main(String[] args) throws InterruptedException {
final ExecutorService exec = Executors.newFixedThreadPool(4);
final ReentrantLock lock = new ReentrantLock();
final Condition condition = lock.newCondition();
final int time = 5;
final Runnable add = new Runnable() {
public void run() {
System.out.println("上锁前锁的状态:" + lock);
lock.lock();
try {
condition.await(time, TimeUnit.SECONDS);
// Thread.sleep(5000);
System.out.println("上锁后锁的状态:" + lock.toString());
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
};
for (int index = 0; index < 4; index++)
exec.submit(add);
exec.shutdown();
}
}
await:
上锁前锁的状态:java.util.concurrent.locks.ReentrantLock@1091a2e2[Unlocked]
上锁前锁的状态:java.util.concurrent.locks.ReentrantLock@1091a2e2[Unlocked]
上锁前锁的状态:java.util.concurrent.locks.ReentrantLock@1091a2e2[Unlocked]
上锁前锁的状态:java.util.concurrent.locks.ReentrantLock@1091a2e2[Locked by thread pool-1-thread-3]
上锁后锁的状态:java.util.concurrent.locks.ReentrantLock@1091a2e2[Locked by thread pool-1-thread-1]
上锁后锁的状态:java.util.concurrent.locks.ReentrantLock@1091a2e2[Locked by thread pool-1-thread-2]
上锁后锁的状态:java.util.concurrent.locks.ReentrantLock@1091a2e2[Locked by thread pool-1-thread-3]
上锁后锁的状态:java.util.concurrent.locks.ReentrantLock@1091a2e2[Locked by thread pool-1-thread-4]
sleep:
上锁前锁的状态:java.util.concurrent.locks.ReentrantLock@fe841b7[Unlocked]
上锁前锁的状态:java.util.concurrent.locks.ReentrantLock@fe841b7[Unlocked]
上锁前锁的状态:java.util.concurrent.locks.ReentrantLock@fe841b7[Locked by thread pool-1-thread-2]
上锁前锁的状态:java.util.concurrent.locks.ReentrantLock@fe841b7[Locked by thread pool-1-thread-2]
上锁后锁的状态:java.util.concurrent.locks.ReentrantLock@fe841b7[Locked by thread pool-1-thread-2]
上锁后锁的状态:java.util.concurrent.locks.ReentrantLock@fe841b7[Locked by thread pool-1-thread-1]
上锁后锁的状态:java.util.concurrent.locks.ReentrantLock@fe841b7[Locked by thread pool-1-thread-4]
上锁后锁的状态:java.util.concurrent.locks.ReentrantLock@fe841b7[Locked by thread pool-1-thread-3]
结论:
wait状态不持有锁
sleep状态持有锁