博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
三线程连续打印ABC
阅读量:4984 次
发布时间:2019-06-12

本文共 2522 字,大约阅读时间需要 8 分钟。

1 package test5; 2  3 import java.util.concurrent.locks.Condition; 4 import java.util.concurrent.locks.ReentrantLock; 5  6 class PrintThread implements Runnable{ 7  8     private ReentrantLock lock=new ReentrantLock(); 9     Condition condition = lock.newCondition();10     private int state=0;11     12     @Override13     public void run() {14         String threadName=Thread.currentThread().getName();15         lock.lock();16         try {17             for(int i=0;i<9;i++){18                 if(threadName.equals("A")){19                     while(state%3!=0){20                         condition.await();21                     }22                 }else if(threadName.equals("B")){23                     while(state%3!=1){24                         condition.await();25                     }26                 }else if(threadName.equals("C")){27                     while(state%3!=2){28                         condition.await();29                     }30                 }31                 state++;32                 System.out.println(threadName);33                 condition.signalAll();34             }35         } catch (Exception e) {36             // TODO: handle exception37         }finally{38             lock.unlock();39         }40         41         42     }43 44 }45 46 public class PrintABC{47     public static void main(String[] args) {48         PrintThread pt=new PrintThread();49         Thread t1=new Thread(pt,"A");50         Thread t2=new Thread(pt,"B");51         Thread t3=new Thread(pt,"C");52         t1.start();53         t2.start();54         t3.start();55     }56 }

 一条线程连续打印ABC:

class PrintABC implements Runnable{    private Lock lock = new ReentrantLock();    private Condition condition = lock.newCondition();        @Override    public void run() {        String threadName = Thread.currentThread().getName();        lock.lock();        int state = 0;        try{            while(state < 10){                if(state % 3 == 0){                    System.out.print("A ");                }else if(state % 3 == 1){                    System.out.print("B ");                }else if(state % 3 == 2){                    System.out.print("C ");                }                state++;            }                    }finally {            lock.unlock();        }    }    }public class ThreadDemo {    public static void main(String[] args) {        PrintABC p = new PrintABC();        Thread t = new Thread(p);        t.start();    }}

 

转载于:https://www.cnblogs.com/noaman/p/6159253.html

你可能感兴趣的文章
线性渐变(linear-gradient)
查看>>
bzoj4486: [Jsoi2015]串分割
查看>>
struts2 下载
查看>>
隔离级别
查看>>
正式开始之前......
查看>>
数据结构之【排序】复习题
查看>>
程序中怎样限制使用时间
查看>>
oc继承,实现,分类
查看>>
vs2010 快捷键大全 (转)
查看>>
oracle环境变量详解
查看>>
程序的组成部分
查看>>
解决Ubuntu的root账号无法登录SSH问题-Permission denied, please try again.
查看>>
查看oracle 用户执行的sql语句历史记录
查看>>
iptables--白名单配置
查看>>
创建一个Hello World模块
查看>>
python中精确输出JSON浮点数的方法
查看>>
大数据未来将呈现的八大发展趋势
查看>>
监听器实现的主要设计模式是观察者模式,
查看>>
[Java学习] Java异常类型
查看>>
${sessionScope.user}的使用方法
查看>>