多线程之——实现循环打印"abc"
2012-10-12 10:15
375 查看
问题:有三个线程ID分别是A、B、C,请有多线编程实现,在屏幕上循环打印10次ABCABC…
思路:可以使用同步多线程对打印字符的控制
思路:可以使用同步多线程对打印字符的控制
public class CirclePrintABC { public static void main(String args[]) { SingleInstance si = SingleInstance.newInstance(); Thread a = new Thread(new PrintThread(si, 'a')); Thread b = new Thread(new PrintThread(si, 'b')); Thread c = new Thread(new PrintThread(si, 'c')); a.start(); b.start(); c.start(); } } class PrintThread implements Runnable { SingleInstance si; char str; public PrintThread(SingleInstance si, char str) { this.si = si; this.str = str; } public void run() { for (int i = 0; i < 10; i++) { synchronized (si) { while (str != si.getPrintStr()) { try { si.wait();//这里是si的wait方法,wait方法不是Thread的 } catch (Exception e) { } } System.out.println(str); si.setPrintStr(); si.notifyAll(); } } } } class SingleInstance { static SingleInstance singleInstance = null; private char printStr = 'a'; public static SingleInstance newInstance() {//单例模式 if (singleInstance == null) { singleInstance = new SingleInstance(); } return singleInstance; } public char getPrintStr() { return this.printStr; } public char setPrintStr() { printStr = (char) (printStr + 1); if (printStr == 'd') { printStr = 'a'; } return printStr; } }
相关文章推荐
- 已知字母序列【d, g, e, c, f, b, o, a】,请实现一个函数针对输入的一组字符串 input[] = {"bed", "dog", "dear", "eye"},按照字母顺序排序并打印
- 实现一个"可变二维数组",这个二维数组的行数要求用户从键盘输入,每行的元素个数仍由用户从键盘输入. //数组元素值用户可以自定义.最后把二维数组打印出来.不要忘记释放数组内存. /*void main
- 请问printf("%d\r\n",i)与printf("%d\n“)有什么区别,这两句都实现了数据的打印与换行
- c++多线程实现循环打印ABC
- 已知字母序列【d, g, e, c, f, b, o, a】,请实现一个函数针对输入的一组字符串 input[] = {"bed", "dog", "dear", "eye"},按照字母顺序排序并打印
- 一个 ArrayList 对象 aList 中存有若干个字符串元素,现欲遍历该 ArrayList 对象,删除其中 所有值为"abc"的字符串元素,请用代码实现。
- 1.打印101到200内的素数(质数)【用双层循环实现】&2.打印1到100内前5个可以被3整除的数
- 一个ArrayList对象aList中存有若干个字符串元素,现欲遍历该ArrayList对象,删除其中所有值为"abc"的字符串元素,请用代码实现。
- 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如: 原始字符串是"abc",打印得到下列所有组合情况
- Java多线程--三个线程分别打印a,b,c.请用多线程实现循环打印15次abc
- 经典String str = new String("abc");内存分配问题
- QT 打印的简单实现(转)
- 面试题--字符串指针与字符串数组的区别char* st="abc;与char* str[]="abc";的异同
- Android实习02:"摇一摇"功能的实现
- 双重while循环实现打印数字11-99
- GD库函数实现"中文水印"
- 用1、2、3、3、4、5这六个数字,用java写一个程序,打印出所有不同的排列 要求:"4"不能在第三位,"3"与"5"不能相连。
- 常用的"收藏,打印,另存为"等JS代码(按纽INPUT和链接形式)
- 多线程循环打印ABC10次
- 标准C++ RTTI的仿MFC实现 - 只用2个宏来实现"根据对象名创建对象"