编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC

来源:互联网 发布:python time.strftime 编辑:程序博客网 时间:2024/04/29 01:24

 

package test1;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * 编写一个程序,开启3个线程, * 这3个线程的ID分别为A、B、C, * 每个线程将自己的ID在屏幕上打印10遍, * 要求输出结果必须按ABC的顺序显示; * 如:ABCABC….依次递推 *  * 设计:LOCK+condition(可以把A、B、C理解成主线程,子线程,孙线程) * @author Mahone * */public class Test3 {public static void main(String[] args) {Test3 obj = new Test3();obj.init();}private void init() {final Test3Business tb = new Test3Business();Thread t1 = new Thread(new Runnable() {@Overridepublic void run() {for (int i = 0; i < 10; i++) {tb.printA();}}});t1.setName("A");Thread t2 = new Thread(new Runnable() {@Overridepublic void run() {for (int i = 0; i < 10; i++) {tb.printB();}}});t2.setName("B");Thread t3 = new Thread(new Runnable() {@Overridepublic void run() {for (int i = 0; i < 10; i++) {tb.printC();}}});t3.setName("C");t1.start();t2.start();t3.start();}}class Test3Business {private String flag = "A";private Lock lock = new ReentrantLock();private Condition cA = lock.newCondition();private Condition cB = lock.newCondition();private Condition cC = lock.newCondition();public void printA () {try {lock.lock();if (!flag.equals("A")) {cA.await();}System.out.println(Thread.currentThread().getName());Thread.sleep(1000);flag = "B";cB.signal();} catch (Exception ex) {ex.printStackTrace();}finally {lock.unlock();}}public void printB () {try {lock.lock();if (!flag.equals("B")) {cB.await();}System.out.println(Thread.currentThread().getName());Thread.sleep(1000);flag = "C";cC.signal();} catch (Exception ex) {ex.printStackTrace();}finally {lock.unlock();}}public void printC () {try {lock.lock();if (!flag.equals("C")) {cC.await();}System.out.println(Thread.currentThread().getName());Thread.sleep(1000);flag = "A";cA.signal();} catch (Exception ex) {ex.printStackTrace();}finally {lock.unlock();}}}

 

 

阅读全文
0 0
原创粉丝点击