编写一个程序,开启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
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 笔试题:编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC
- 开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推
- 润和面试题:开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
- 基于ArrayBlockingQueue的生产者和消费者
- 222
- tomcat根目录部署项目war包
- java 多线程 笔试题
- 333
- 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC
- 444
- 555
- mongodb删除已处理过的数据,即非新增数据
- 6666
- Buffer的基本用法
- 2进制,10进制,16进制
- 7777
- Android布局--Android fill_parent、wrap_content和match_parent的区别