问题遇到的现象和发生背景
两个线程相互等待打印数据,使用Condition ,活锁。 不知道怎么写才对
问题相关代码,请勿粘贴截图
public class LockAndCondition {
@Test
public void t1() throws InterruptedException {
Lock lock = new ReentrantLock();
Masthead m1 = new Masthead(new Object[]{1, 2, 3}, lock, "T1");
Masthead m2 = new Masthead(new Object[]{"A", "B", "C"}, lock, "T2");
m1.start();
Thread.sleep(1000);
m2.start();
m1.join();
m2.join();
}
}
class Masthead extends Thread {
Object[] data;
Lock lock;
Condition condition;
String name;
public Masthead(Object[] data, Lock lock, String name) {
this.data = data;
this.lock = lock;
this.condition = lock.newCondition();
this.name = name;
setName(name);
}
@Override
public void run() {
try {
lock.lock();
for (Object d : data) {
System.out.println(d);
condition.signalAll();
condition.await();
}
condition.signalAll();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
}
运行结果及报错内容
结果就是两个线程都进行等待,活锁了