使用Java 多线程编程 让三个线程轮流输出ABC,循环10次后结束
简要分析:
要求三个线程轮流输出,这里我们要使用一个对象锁,让关键部分的代码放入同步块当中。同时要有一个变量记录打印的次数到达10次循环后不再打印,另外一个就是要给每个线程一个标志号,我们根据标识号来输出对应的信息。
package com.test;
public class PrintOneTwoThree {
	public static void main(String[] args) {
		Print p1 = new Print(0);
		Print p2 = new Print(1);
		Print p3 = new Print(2);
		new Thread(p1, "p1").start();
		new Thread(p2, "p2").start();
		new Thread(p3, "p3").start();
		while (Thread.activeCount() > 1)
			;
		System.out.println("Done!");
	}
}
class Print implements Runnable {
	private static int state = 0;
	private int id;
	private static Object lock = new Object();
	public Print(int id) {
		this.id = id;
	}
	@Override
	public void run() {
		synchronized (lock) {
			while (state < 30) {
				if (state % 3 == id) {
					switch (id) {
					case 0:
						System.out.println("["
								+ Thread.currentThread().getName() + "]" + "A");
						break;
					case 1:
						System.out.println("["
								+ Thread.currentThread().getName() + "]" + "B");
						break;
					case 2:
						System.out.println("["
								+ Thread.currentThread().getName() + "]" + "C");
						break;
					default:
						break;
					}
					state++;
					lock.notifyAll();
				} else {
					try {
						lock.wait();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		}
	}
}
使用Java 多线程编程 让三个线程轮流输出ABC,循环10次后结束的更多相关文章
- Java多线程编程(三)线程间通信
		
线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体.线程间的通信就是成为整体的必用方案之一,可以说,使线程间进行通信后,系统之间的交互性会更强大,在大大提高CPU利用率的同时 ...
 - Java多线程:用三个线程控制循环输出10次ABC
		
转载:http://www.cnblogs.com/gaopeng527/p/5257884.html 题目:有A,B,C三个线程, A线程输出A, B线程输出B, C线程输出C,要求, 同时启动三个 ...
 - Java多线程-两种常用的线程计数器CountDownLatch和循环屏障CyclicBarrier
		
Java多线程编程-(1)-线程安全和锁Synchronized概念 Java多线程编程-(2)-可重入锁以及Synchronized的其他基本特性 Java多线程编程-(3)-从一个错误的双重校验锁 ...
 - Java多线程编程核心技术(三)多线程通信
		
线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体.线程间的通信就是成为整体的必用方案之一,可以说,使线程间进行通信后,系统之间的交互性会更强大,在大大提高CPU利用率的同时 ...
 - C++多线程编程(三)线程间通信
		
多线程编程之三——线程间通讯 作者:韩耀旭 原文地址:http://www.vckbase.com/document/viewdoc/?id=1707 七.线程间通讯 一般而言,应用程序中的一个次要线 ...
 - Java多线程编程(七)线程状态、线程组与异常处理
		
一.线程的状态 线程对象在不同的运行时期有不同的状态,状态信息就存在于State枚举类中. 调用与线程有关的方法后,会进入不同的线程状态,这些状态之间某些是可双向切换的,比如WAITING和RUNNI ...
 - 迅雷笔试题 (JAVA多线程)启动三个线程,分别打印A B C,现在写一个程序 循环打印ABCABCABC
		
题目:http://wenku.baidu.com/view/d66187aad1f34693daef3e8a.html 启动三个线程,分别打印A B C,现在写一个程序 循环打印ABCABCABC. ...
 - java并发编程(三)----线程的同步
		
在现实开发中,我们或多或少的都经历过这样的情景:某一个变量被多个用户并发式的访问并修改,如何保证该变量在并发过程中对每一个用户的正确性呢?今天我们来聊聊线程同步的概念. 一般来说,程序并行化是为了获得 ...
 - java并发编程(三)线程挂起,恢复和终止的正确方法
		
转载请注明出处:http://blog.csdn.net/ns_code/article/details/17095733 下面我们给出不用上述两个方法来实现线程挂起和恢复的策略--设置标志位. ...
 
随机推荐
- 【小白的CFD之旅】13 敲门实例【续3】
			
接上文[小白的CFD之旅]12 敲门实例[续2] 4 Results4.1 计算监测图形4.2 Graphics4.2.1 壁面温度分布4.2.2 创建截面4.2.3 显示截面物理量4.2.4 Pat ...
 - Java Generics and Collections-2.2
			
2.2 Wildcards with extends 前面介绍过List<Integer>不是List<Number>的子类,即前者不能替换后者, java使用? extend ...
 - ASP.NET CORE dotnet run 命令使用debug方式运行
			
由于我的开发环境比较复杂,每次调试一套项目都要启动好几个VS,比较繁琐,今天决定换一种方式调试,对于不该改动的代码的附加项目直接使用dotnet run命令以debug的运行方式运行, 一开始无法运行 ...
 - mysqli_fetch_assoc   php的新的库函数
			
注释:mysql_fetch_assoc() 函数 定义和用法mysql_fetch_assoc() 函数从结果集中取得一行作为关联数组. 返回根据从结果集取得的行生成的关联数组,如果没有更多行,则返 ...
 - 【转】Chrome 控制台不完全指南
			
原文出处: 刘哇勇的博客(@刘哇勇) 欢迎分享原创到伯乐头条 Chrome的开发者工具已经强大到没朋友的地步了,特别是其功能丰富界面友好的console,使用得当可以有如下功效: 更高「逼格」更快 ...
 - android开发环境搭建(ubuntu15.04+jdk8+eclipse+android sdk)
			
开始学习android开发,首先对其环境对搭建比较重要.平台可以选择window/linux/mac等,这里,我选择ubuntu系统,方法比较原始,当然也可以直接用google提供的android s ...
 - FineUI小技巧(6)自定义页面回发
			
前言 FineUI中的绝大部分回发事件都是由控件触发了,比如按钮的点击事件,下拉列表的改变事件,表格的排序分页事件.但有时我们可能会要自己触发页面回发,这时就要知道怎么使用 JavaScript 来做 ...
 - .NET跨平台之旅:将示例站点从ASP.NET 5 Beta7升级至RC1
			
今天,我们将示例站点(about.cnblogs.com,服务器操作系统是Ubuntu)从ASP.NET 5 Beta7升级到了RC1,在升级过程中只遇到了一个问题. 在运行 dnvm upgrade ...
 - 2.0 (2)测试pymongo
			
在数据库中创建数据库.表,插入数据. from pymongo import MongoClient host = "localhost" port = 27017 client ...
 - Java 理论与实践: 处理 InterruptedException
			
捕捉到它,然后怎么处理它? 很多 Java™ 语言方法,例如 Thread.sleep() 和 Object.wait(),都可以抛出InterruptedException.您不能忽略这个异常,因为 ...