Lock.newCondition()是Java的ReentrantLock类提供的一种用于线程同步的高级方式。它创建与指定锁相关联的条件对象,让多个线程可以互相等待和通知。具体来说,当一个线程在等待某个条件满足时,它可以调用条件对象的await()方法进入等待状态,而其他线程可以在满足条件后调用条件对象的signal()方法通知等待的线程继续执行。在使用Lock.newCondition()方法时,需要先创建一个Lock对象,然后通过该对象获取一个Condition对象。例如:
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class Example {
private Lock lock = new ReentrantLock();
private Condition condition = lock.newCondition();
private boolean isReady = false;
public void producer() {
lock.lock();
try {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
isReady = true;
condition.signalAll();
} finally {
lock.unlock();
}
}
public void consumer() {
lock.lock();
try {
while (!isReady) {
try {
condition.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Consuming data...");
} finally {
lock.unlock();
}
}
public static void main(String[] args) {
Example example = new Example();
Thread producerThread = new Thread(() -> example.producer());
Thread consumerThread = new Thread(() -> example.consumer());
producerThread.start();
consumerThread.start();
}
}