多个线程操作一个变量(Lock)
1、需求三个线程操作同一个变量,顺序的操作
public class WindowSell4 {
private Lock lock = new ReentrantLock();
Condition conditionA = lock.newCondition();
Condition conditionB= lock.newCondition();
Condition conditionC = lock.newCondition();
private int num = 1;
public void printA(){
lock.lock();
try{
while( num != 1){
conditionA.await();
}
num = 2;
System.out.println("当前线程是"+Thread.currentThread().getName()+"打印的是=>AAAAAAAA");
conditionB.signal();
}catch (InterruptedException e){
}finally {
lock.unlock();
}
}
public void printB(){
lock.lock();
try{
while( num != 2){
conditionB.await();
}
num = 3;
System.out.println("当前线程是"+Thread.currentThread().getName()+"打印的是=>BBBBBBB");
conditionC.signal();
}catch (InterruptedException e){
}finally {
lock.unlock();
}
}
public void printC(){
lock.lock();
try{
while( num != 3){
conditionC.await();
}
num = 1;
System.out.println("当前线程是"+Thread.currentThread().getName()+"打印的是=>CCCCCC");
conditionA.signal();
}catch (InterruptedException e){
}finally {
lock.unlock();
}
}
}
public class MainTest {
public static void main(String[] args) {
WindowSell4 windowSell4 = new WindowSell4();
new Thread(()->{
for (int i = 0; i < 12; i++) {
windowSell4.printA();
}
},"A").start();
new Thread(()->{
for (int i = 0; i < 12; i++) {
windowSell4.printB();
}
},"B").start();
new Thread(()->{
for (int i = 0; i < 12; i++) {
windowSell4.printC();
}
},"C").start();
}
}
当前线程是A打印的是=>AAAAAAAA
当前线程是B打印的是=>BBBBBBB
当前线程是C打印的是=>CCCCCC
当前线程是A打印的是=>AAAAAAAA
当前线程是B打印的是=>BBBBBBB
当前线程是C打印的是=>CCCCCC
当前线程是A打印的是=>AAAAAAAA
当前线程是B打印的是=>BBBBBBB
当前线程是C打印的是=>CCCCCC
当前线程是A打印的是=>AAAAAAAA
当前线程是B打印的是=>BBBBBBB
当前线程是C打印的是=>CCCCCC
当前线程是A打印的是=>AAAAAAAA
当前线程是B打印的是=>BBBBBBB
当前线程是C打印的是=>CCCCCC
当前线程是A打印的是=>AAAAAAAA
当前线程是B打印的是=>BBBBBBB
当前线程是C打印的是=>CCCCCC
当前线程是A打印的是=>AAAAAAAA
当前线程是B打印的是=>BBBBBBB
当前线程是C打印的是=>CCCCCC
当前线程是A打印的是=>AAAAAAAA
当前线程是B打印的是=>BBBBBBB
当前线程是C打印的是=>CCCCCC
当前线程是A打印的是=>AAAAAAAA
当前线程是B打印的是=>BBBBBBB
当前线程是C打印的是=>CCCCCC
当前线程是A打印的是=>AAAAAAAA
当前线程是B打印的是=>BBBBBBB
当前线程是C打印的是=>CCCCCC
当前线程是A打印的是=>AAAAAAAA
当前线程是B打印的是=>BBBBBBB
当前线程是C打印的是=>CCCCCC
当前线程是A打印的是=>AAAAAAAA
当前线程是B打印的是=>BBBBBBB
当前线程是C打印的是=>CCCCCC
浙公网安备 33010602011771号