Java多线程:用三个线程控制循环输出10次ABC

题目:有A,B,C三个线程, A线程输出A, B线程输出B, C线程输出C,要求, 同时启动三个线程, 按顺序输出ABC, 循环10次。

解题思路:要按顺序输出ABC, 循环10次,就要控制三个线程同步工作,也就是说要让三个线程轮流输出,直到10个ABC全部输出则结束线程。这里用一个Lock对象来控制三个线程的同步。用一个int型变量state标识由那个线程输出。

 1 package com.thread;
 2
 3 import java.util.concurrent.locks.Lock;
 4 import java.util.concurrent.locks.ReentrantLock;
 5
 6 public class ABC {
 7     private static int state = 0;
 8
 9     public static void main(String[] args) {
10         final Lock l = new ReentrantLock();
11
12         Thread A = new Thread(new Runnable(){
13             @Override
14             public void run() {
15                 while (state<=30) {
16                     l.lock();
17                     if(state%3==0){
18                         System.out.println("A");
19                         state ++;
20                     }
21                     l.unlock();
22                 }
23             }
24         });
25         Thread B = new Thread(new Runnable(){
26             @Override
27             public void run() {
28                 while (state<=30) {
29                     l.lock();
30                     if(state%3==1){
31                         System.out.println("B");
32                         state ++;
33                     }
34                     l.unlock();
35                 }
36             }
37         });
38         Thread C = new Thread(new Runnable(){
39             @Override
40             public void run() {
41                 while (state<=30) {
42                     l.lock();
43                     if(state%3==2){
44                         System.out.println("C");
45                         state ++;
46                     }
47                     l.unlock();
48                 }
49             }
50         });
51         A.start();
52         B.start();
53         C.start();
54     }
55
56 }

原文网址:http://www.cnblogs.com/liuling/p/2013-9-13-01.html

时间: 2024-10-06 08:58:01

Java多线程:用三个线程控制循环输出10次ABC的相关文章

Java 多线程(三) 线程的生命周期及优先级

Java 多线程(三) 线程的生命周期及优先级 线程的生命周期 线程的生命周期:一个线程从创建到消亡的过程. 如下图,表示线程生命周期中的各个状态: 线程的生命周期可以分为四个状态: 1.创建状态: 当用new操作符创建一个新的线程对象时,该线程处于创建状态. 处于创建状态的线程只是一个空的线程对象,系统不为它分配资源. 2.可运行状态: 执行线程的start()方法将为线程分配必须的系统资源,安排其运行,并调用线程体——run()方法,这样就使得该线程处于可运行状态(Runnable). 这一

Java多线程开启三个线程输出ABC10次

最近学多线程,搜了一下,满屏幕的问题都是类似标题那样的,所以就拿这个当开始吧,自己试了一下手, 多次把电脑CPU跑到100%,终于还是写出来了,大体思路为: 声明一个变量,标记三个线程该哪个线程输出,每次输出将该变量+1,判断方式为 变量对3的余数,如果为1-A,2-B, 3-C 1 public class ABC { 2 3 private static int mark = 0; 4 5 private static Object obj = new Object(); 6 7 publi

Java 多线程(八) 线程状态图

结合多线程的学习过程,介绍线程的状态图,随着学习的深入,这幅图不断加入新的内容. 一.线程基本状态图 这幅图是在Java 多线程(三) 线程的生命周期及优先级出现过的: 图中是线程运行的基本状态:线程调用start()方法开始后,就进入到可运行状态,随着CPU的资源调度在运行和可运行之间切换:遇到阻塞则进入阻塞状态. 二.加入同步的线程状态图 多线程的同步机制,及synchronized关键字的使用学习: Java 多线程(五) 多线程的同步 Java 多线程(六) synchronized关键

Java多线程(三)、线程同步(转)

Java多线程(三).线程同步 分类: javaSE综合知识点 2012-09-18 17:59 2400人阅读 评论(0) 收藏 举报 在之前,已经学习到了线程的创建和状态控制,但是每个线程之间几乎都没有什么太大的联系.可是有的时候,可能存在多个线程多同一个数据进行操作,这样,可能就会引用各种奇怪的问题.现在就来学习多线程对数据访问的控制吧. 由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个严重的问题.Java语言提供了专门机制以解决这种冲突,有效避免了同一个数

“全栈2019”Java多线程第三十五章:如何获取线程被等待的时间?

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多线程第三十五章:如何获取线程被等待的时间? 下一章 "全栈2019"Java多线程第三十六章:如何设置线程的等待截止时间 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复&qu

Java多线程编程— 概念以及常用控制

多线程能满足程序员编写非常有效率的程序来达到充分利用CPU的目的,因为CPU的空闲时间能够保持在最低限度.有效利用多线程的关键是理解程序是并发执行而不是串行执行的.例如:程序中有两个子系统需要并发执行,这时候就需要利用多线程编程.线程的运行中需要使用计算机的内存资源和CPU. 一.    进程与线程的概念 这两者的概念,这里只给出自己狭隘的理解: 进程:进程是一个独立的活动的实体,是系统资源分配的基本单元.它可以申请和拥有系统资源.每个进程都具有独立的代码和数据空间(进程上下文).进程的切换会有

Java多线程(三)volatile域

相关文章 Java多线程(一)线程定义.状态和属性 Java多线程(二)同步 Android多线程(一)线程池 Android多线程(二)AsyncTask源码分析 前言 有时仅仅为了读写一个或者两个实例域就使用同步的话,显得开销过大,volatile关键字为实例域的同步访问提供了免锁的机制.如果声明一个域为volatile,那么编译器和虚拟机就知道该域是可能被另一个线程并发更新的.再讲到volatile关键字之前我们需要了解一下内存模型的相关概念以及并发编程中的三个特性:原子性,可见性和有序性

Java多线程-同步:synchronized 和线程通信:生产者消费者模式

大家伙周末愉快,小乐又来给大家献上技术大餐.上次是说到了Java多线程的创建和状态|乐字节,接下来,我们再来接着说Java多线程-同步:synchronized 和线程通信:生产者消费者模式. 一.同步:synchronized 多个线程同时访问一个对象,可能造成非线程安全,数据可能错误,所谓同步:就是控制多个线程同时访就是控制多线程操作同一个对象时,注意是同一个对象,数据的准确性, 确保数据安全,但是加入同步后因为需要等待,所以效率相对低下. 如:一个苹果,自己一个人去咬怎么都不会出问题,但是

Java多线程编程基础之线程对象

在进入java平台的线程对象之前,基于基础篇(一)的一些问题,我先插入两个基本概念. [线程的并发与并行] 在单CPU系统中,系统调度在某一时刻只能让一个线程运行,虽然这种调试机制有多种形式(大多数是时间片轮巡为主),但无论如何,要通过不断切换需要运行的线程让其运行的方式就叫并发(concurrent).而在多CPU系统中,可以让两个以上的线程同时运行,这种可以同时让两个以上线程同时运行的方式叫做并行(parallel). 在上面包括以后的所有论述中,请各位朋友谅解,我无法用最准确的词语来定义储