使用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.您不能忽略这个异常,因为 ... 
