package ThreadTest;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class AwaitTest1 extends Thread{
private final Lock lock = new ReentrantLock();
private Condition waitCondition = lock.newCondition();
public static void main(String[] args) throws InterruptedException {
new AwaitTest1().threads();
}
public void threads() throws InterruptedException {
Thread t1 = new Thread(){
public void run(){
try {
lock.lock();
System.out.println("do somthing xxx long time");
waitCondition.signalAll();
System.out.println("sign other");
Thread.sleep(500);
lock.unlock();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
Thread t2 = new Thread(){
public void run(){
System.out.println(waitResult());
}
};
t1.start();
t2.start();
}
public Boolean waitResult() {
System.out.println("x");
lock.lock();
Boolean result = false;
try {
System.out.println("y");
result = waitCondition.await(1000, TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}
lock.unlock();
return result;
}
}
说下我写这个目的,我也是才学学习多线程,在此遇到了不少问题,我本来想些个异步的通信 就是说当我运行线程T1的时候,他唤醒T2,就像是Future那个异步回调,但是不知道该如何写,也不知道这个result什么时候返回true,我感觉是当线程T1完成复杂的计算后,然后在await在没有超时的情况下,会返回为true,但是现在我程序写的有问题,请各位帮忙解决下,谢谢