package demo;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class ThreadDemo {
public static void main(String[] args) {
Ticket ticket = new Ticket();
new Thread(()-> { for (int i = 0; i < 10; i++) ticket.test2(); },"A").start();
new Thread(()-> { for (int i = 0; i < 10; i++) ticket.test3(); },"B").start();
new Thread(()-> { for (int i = 0; i < 10; i++) ticket.test1(); },"C").start();
}
}
class Ticket {
private int number = 1;
private Lock lock = new ReentrantLock();
private Condition condition1 = lock.newCondition();
private Condition condition2 = lock.newCondition();
private Condition condition3 = lock.newCondition();
public void test1() {
lock.lock();
try {
while(number != 1){
condition1.await();}
System.out.println("=>AAAAAAA");
number = 2;
condition2.signal();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
public void test2(){
lock.lock();
try {
while (number != 2)
condition2.await();
System.out.println("=>BBBBBBB");
number = 3;
condition3.signal();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
public void test3(){
lock.lock();
try {
while (number != 3)
condition3.await();
System.out.println("=>CCCCCCC");
number = 1;
condition1.signal();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
执行结果:
"D:\Program Files\Java\jdk1.8.0_241\bin\java.exe" "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA 2020.3.2\lib\idea_rt.jar=53537:D:\Program Files\JetBrains\IntelliJ IDEA 2020.3.2\bin" -Dfile.encoding=UTF-8 -classpath "D:\Program Files\Java\jdk1.8.0_241\jre\lib\charsets.jar;D:\Program Files\Java\jdk1.8.0_241\jre\lib\deploy.jar;D:\Program Files\Java\jdk1.8.0_241\jre\lib\ext\access-bridge-64.jar;D:\Program Files\Java\jdk1.8.0_241\jre\lib\ext\cldrdata.jar;D:\Program Files\Java\jdk1.8.0_241\jre\lib\ext\dnsns.jar;D:\Program Files\Java\jdk1.8.0_241\jre\lib\ext\jaccess.jar;D:\Program Files\Java\jdk1.8.0_241\jre\lib\ext\jfxrt.jar;D:\Program Files\Java\jdk1.8.0_241\jre\lib\ext\localedata.jar;D:\Program Files\Java\jdk1.8.0_241\jre\lib\ext\nashorn.jar;D:\Program Files\Java\jdk1.8.0_241\jre\lib\ext\sunec.jar;D:\Program Files\Java\jdk1.8.0_241\jre\lib\ext\sunjce_provider.jar;D:\Program Files\Java\jdk1.8.0_241\jre\lib\ext\sunmscapi.jar;D:\Program Files\Java\jdk1.8.0_241\jre\lib\ext\sunpkcs11.jar;D:\Program Files\Java\jdk1.8.0_241\jre\lib\ext\zipfs.jar;D:\Program Files\Java\jdk1.8.0_241\jre\lib\javaws.jar;D:\Program Files\Java\jdk1.8.0_241\jre\lib\jce.jar;D:\Program Files\Java\jdk1.8.0_241\jre\lib\jfr.jar;D:\Program Files\Java\jdk1.8.0_241\jre\lib\jfxswt.jar;D:\Program Files\Java\jdk1.8.0_241\jre\lib\jsse.jar;D:\Program Files\Java\jdk1.8.0_241\jre\lib\management-agent.jar;D:\Program Files\Java\jdk1.8.0_241\jre\lib\plugin.jar;D:\Program Files\Java\jdk1.8.0_241\jre\lib\resources.jar;D:\Program Files\Java\jdk1.8.0_241\jre\lib\rt.jar;D:\ideaFileFolder\IdeaProjects\myJFrame\out\production\myJFrame" demo.ThreadDemo
=>AAAAAAA
=>BBBBBBB
=>CCCCCCC
=>AAAAAAA
=>BBBBBBB
=>CCCCCCC
=>AAAAAAA
=>BBBBBBB
=>CCCCCCC
=>AAAAAAA
=>BBBBBBB
=>CCCCCCC
=>AAAAAAA
=>BBBBBBB
=>CCCCCCC
=>AAAAAAA
=>BBBBBBB
=>CCCCCCC
=>AAAAAAA
=>BBBBBBB
=>CCCCCCC
=>AAAAAAA
=>BBBBBBB
=>CCCCCCC
=>AAAAAAA
=>BBBBBBB
=>CCCCCCC
=>AAAAAAA
=>BBBBBBB
=>CCCCCCC
Process finished with exit code 0