package test5;

 import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock; class PrintThread implements Runnable{ private ReentrantLock lock=new ReentrantLock();
Condition condition = lock.newCondition();
private int state=0; @Override
public void run() {
String threadName=Thread.currentThread().getName();
lock.lock();
try {
for(int i=0;i<9;i++){
if(threadName.equals("A")){
while(state%3!=0){
condition.await();
}
}else if(threadName.equals("B")){
while(state%3!=1){
condition.await();
}
}else if(threadName.equals("C")){
while(state%3!=2){
condition.await();
}
}
state++;
System.out.println(threadName);
condition.signalAll();
}
} catch (Exception e) {
// TODO: handle exception
}finally{
lock.unlock();
} } } public class PrintABC{
public static void main(String[] args) {
PrintThread pt=new PrintThread();
Thread t1=new Thread(pt,"A");
Thread t2=new Thread(pt,"B");
Thread t3=new Thread(pt,"C");
t1.start();
t2.start();
t3.start();
}
}

一条线程连续打印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();
}
}

三线程连续打印ABC的更多相关文章

  1. 斐讯面试记录—三线程交替打印ABC

    package cn.shenzhen.feixun; public class PrintABC extends Thread{ private String name; private Objec ...

  2. java多线程编程题之连续打印abc的几种解法

    一道编程题如下: 实例化三个线程,一个线程打印a,一个打印b,一个打印c,三个线程同时执行,要求打印出6个连着的abc 题目分析: 通过题意我们可以得出,本题需要我们使用三个线程,三个线程分别会打印6 ...

  3. java多线程编程之连续打印abc的几种解法

    一道编程题如下: 实例化三个线程,一个线程打印a,一个线程打印b,一个线程打印c,三个线程同时执行,要求打印出10个连着的abc. 题目分析: 通过题意我们可以得出,本题需要我们使用三个线程,三个线程 ...

  4. {Python之线程} 一 背景知识 二 线程与进程的关系 三 线程的特点 四 线程的实际应用场景 五 内存中的线程 六 用户级线程和内核级线程(了解) 七 python与线程 八 Threading模块 九 锁 十 信号量 十一 事件Event 十二 条件Condition(了解) 十三 定时器

    Python之线程 线程 本节目录 一 背景知识 二 线程与进程的关系 三 线程的特点 四 线程的实际应用场景 五 内存中的线程 六 用户级线程和内核级线程(了解) 七 python与线程 八 Thr ...

  5. java三线程循环有序打印ABC

    迅雷笔试题: 编写一个程序,开启3个线程,这3个线程的ID分别为A.B.C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示:如:ABCABC….依次递推. 解决思路:每个线 ...

  6. 多线程面试题之【三线程按顺序交替打印ABC的方法】

    建立三个线程,线程名字分别为:A.B.C,要求三个线程分别打印自己的线程名字,但是要求三个线程同时运行,并且实现交替打印,即按照ABCABCABC的顺序打印.打印10轮,打印完毕控制台输出字符串:&q ...

  7. 三个线程,ABC 10次(volatile+synchronized(2 synchronized可以保证内存可见性,所以去掉status 的volatile修饰符)

    package ThreadABC; public class MyThread extends Thread { public static int status = 0; @Override pu ...

  8. 三个线程,ABC 10次(volatile+synchronized)

    package ThreadABC; public class Share { private volatile int status; public int getStatus() { return ...

  9. [******] java多线程连续打印abc

    题目描述 建立三个线程A.B.C,A线程打印10次字母A,B线程打印10次字母B,C线程打印10次字母C,但是要求三个线程同时运行,并且实现交替打印,即按照ABCABCABC的顺序打印. 5种方法 使 ...

随机推荐

  1. 个推推送iOS版 常见问题详解

    原文:http://www.oschina.net/question/1782938_234760   1.提交了.p12文件后多久可以测试? 提交后10分钟左右才可以测试,并不是立即生效的.   2 ...

  2. 获取本地soapUI项目路径

    def projectDir = ${projectDir}

  3. Ubuntu gmake: command not found

    由于ubuntu上取消了gmake(GUNmake)的而全部使用make代替.所以此问题的解决方式是有两种: 1.makefile中 gmake用make代替: 2.创建一个make的gmake连接: ...

  4. 1、android源代码下载及目录分析,和eclipser的跟踪

    1.在eclipse中跟踪源代码:假如对mainactivity.java里面的activity按Ctrl+鼠标左键(前提已经导入android源代码:方法1:在项目点击右键,然后找到properti ...

  5. 6、android 网络编程

    1.基于socket的用法 服务器端: 先启动一个服务器端的socket     ServerSocket svr = new ServerSocket(8989); 开始侦听请求 Socket s  ...

  6. oracle 拼接一张表所有字段

    declare t_name varchar2(100) := upper('dba_tab_columns'); cursor c_col is select column_name from db ...

  7. Wireshark找不到网络接口问题

    Wireshark找不到网络接口问题 在运行Wireshark工具抓包时,需要有管理员用户权限.如果是普通用户启动的话,将会提示找不到网络接口.

  8. PHP中常用的函数

    1.php 字符串截取函数 2.php取得当前时间函数 3.php 字符串长度函数 4.几种php 删除数组元素方法 5.php中var_dump()函数的详解说明 6.PHP preg_match正 ...

  9. 网络数据包收发流程(四):协议栈之packet_type

    进入函数netif_receive_skb()后,skb正式开始协议栈之旅.先上图,协议栈大致过程如下所示:跟OSI七层模型不同,linux根据包结构对网络进行分层.比如,arp头和ip头都是紧跟在以 ...

  10. NIC bonding

    Bonding is the same as port trunking. In the following I will use the word bonding because practical ...