多线程之——实现循环打印"abc"

问题:有三个线程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;
	}

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值