多线程练习--顺序打印ABC十次

这是迅雷的一道面试题,顺序打印ABC十次。

public class TenABC {

	public static void main(String[] args) {
		final BlockingQueue queue = new ArrayBlockingQueue(30);
		for (int i = 0; i < 10; i++) {
			try {
				queue.put("A");
				queue.put("B");
				queue.put("C");
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}

		new Thread(new Runnable() {
			@Override
			public void run() {
				boolean flag =true;
				while(flag){
					if(queue.size()!=0){
						try {
							System.out.print(queue.take());
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
					}
					else{
						flag=false;
					}
				}

			}
		}).start();

	}
}

ABCABCABCABCABCABCABCABCABCABC

时间: 2024-10-15 01:51:02

多线程练习--顺序打印ABC十次的相关文章

JAVA 多线程开篇 -从按顺序打印ABC开始

序言 很想把一个问题弄清楚,特别是以前一直模模糊糊的并发编程,今天在华为OJ上碰到一道题,“顺序打印ABC的两种方法开始写起”,就以这道题开篇,希望日后有时间把并发编程的基本问题弄清楚. 问题 启动三个线程,一个线程打印A,一个打印B,一个打印C,按顺序打印ABC.....如输入3,输出就是“ABCABCABC” 程序 线程的调度是由系统操作的,要想多个线程按照要求顺序打印,就必须做好线程间的同步. 思路:四个线程循环打印,但是一个线程打印一个字母释放锁后无法确定获得锁的是哪一个线程,这就需要用

python 多线程实现循环打印 abc

python 多线程实现循环打印 abc 好久没写过python了, 想自己实践一下把 非阻塞版 import threading import time def print_a(): global value global lock global stop_flag while stop_flag: while True: if value == 0 or value == 3: break lock.acquire() value = 1 time.sleep(1) print("aaa&q

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

建立三个线程,线程名字分别为:A.B.C,要求三个线程分别打印自己的线程名字,但是要求三个线程同时运行,并且实现交替打印,即按照ABCABCABC的顺序打印.打印10轮,打印完毕控制台输出字符串:"打印完毕" 方法之一:使用Condition等待唤醒机制,代码如下: import java.util.concurrent.CountDownLatch; import java.util.concurrent.locks.Condition; import java.util.concu

Java多线程循环打印ABC的5种实现方法

题目:3个线程循环打印ABC,其中A打印3次,B打印2次,C打印1次,循环打印2轮一.Synchronized同步法思路:使用synchronized.wait.notifyAll的方法利用线程标记变量控制三个线程的执行顺序. /** * @author XDarker * 2018-5-17 */public class Main { public static void main(String[] args) throws InterruptedException { int num = 1

Condition实现多线程顺序打印

Condition实现多线程顺序打印: 1 import java.util.concurrent.locks.Condition; 2 import java.util.concurrent.locks.ReentrantLock; 3 4 public class Run { 5 6 volatile public static int nextPrintWho = 1; 7 private static ReentrantLock lock = new ReentrantLock(); 8

多线程顺序打印

前言: 下面的代码是参考网址:http://love3400wind.blog.163.com/blog/static/796308012013117102941831/ , http://blog.csdn.net/liu251/article/details/6227763 做了一点点的改动. 感谢两位作者! 题目: 有A,B,C三个线程, A线程输出A, B线程输出B, C线程输出C 要求, 同时启动三个线程, 按顺序输出ABC, 循环10次 package org.wit.ff.thre

线程按照顺序打印

package com.cn.test.thread; /** *abc三个线程顺序打印十次 */ public class TestSortedThread extends Thread{ static int threadFlag = 1; public TestSortedThread(String string) { super(string); } @Override public void run() { for (int i=0; i<10; i++) { sortThread()

多线程-线程一打印1,2,3,4,5线程二打印6,7,8,9,10,线程三打印11,12,13,14,15,...直到45结束

多线程-线程一打印1,2,3,4,5线程二打印6,7,8,9,10,线程三打印11,12,13,14,15,...知道45结束 public class Exam3{ public static void main(String[]args){ MyThread t1=new MyThread("线程一"); MyThread t2=new MyThread("线程二"); MyThread t3=new MyThread("线程三"); t1.

按之字形顺序打印二叉树

题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推 /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; */ class Solution { public: vector<vect