目的是想用ReentrantLock Condition 按数组 顺序输出;但好像一直锁等待,不明白为什么,麻烦大神解惑,感谢
private static ReentrantLock lock = new ReentrantLock();
private static Condition c = lock.newCondition();
private static Condition c2 = lock.newCondition();
volatile static int m = 0;
public static void main(String[] args) throws Exception {
int[] arr = {1,2,3,4,5,6,7,8,9,0};
for(int i = 0;i<arr.length;i++) {
final int n = arr[i];
new Callable<String>() {
@Override
public String call() throws Exception {
String rt = "";
try {
lock.lock();
if(n != m) {
System.out.println(m+" wait");
c.await();
rt+="--wait--";
}
System.out.println(Thread.currentThread().getName()+"-------run-----"+n);
c.signalAll();
rt+="--ok";
m++;
return rt;
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
lock.unlock();
}
return null;
}
}.call();
}
}