##底層業務線數據隔離
要求:子線程循環跑30次,暫停,然後跑到主線程40次,接着子線程循環跑30次,暫停,主線程跑40次
如此往復,一共交替50次
public class ThreadTest {
private static Lock lock = new ReentrantLock();
private static Condition chil_condition = lock.newCondition();
private static Condition main_condition = lock.newCondition();
private volatile static int sign = 0;
public static void main(String[] args) throws Exception{
new Thread(()->{
while (true){
for(int i = 0;i<50;i++){
lock.lock();
try {
if(sign!=0){
chil_condition.await();
}
for(int j = 0;j<30;j++){
try {
Thread.sleep(40);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(String.format("子線程運行第%d輪第%d次",i,j));
}
sign=1;
main_condition.signal();
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
lock.unlock();
}
}
}
}).start();
while (true){
for(int i = 0;i<50;i++){
lock.lock();
if(sign==0){
main_condition.await();
}
for(int j = 0;j<40;j++){
Thread.sleep(40);
System.out.println(String.format("主線程運行第%d輪第%d次",i,j));
}
sign=0;
chil_condition.signal();
lock.unlock();
}
}
}
}