for循环内使用wait()方法注意

这篇博客总结了在使用wait()和notify()进行线程通信时,在for循环内部使用if-elseif结构调用wait()方法导致的错误。作者通过示例代码展示了由于没有在wait()后重新判断条件,导致输出结果缺失的情况,并提出了将for循环改为while循环以及修改判断结构的解决方案。
摘要由CSDN通过智能技术生成

     今天用wait()和notify()进行线程通信实现输出12A34B56C.....格式的长字符,写了一段看起来很不成熟的代码,然后还把自己绕晕了= =、原来是因为在for循环里使用if-elseif结构调用wait方法导致出错,找了好久的bug终于反应过来了,为了下次不再犯类似的错误,在这里进行一下总结。

   下面就是我那不太成熟的代码:

//打印字母的线程类
public class PrintAlphabet implements Runnable {
      private MyPrint myprint;

	@Override
	public void run() {
          myprint.printAlphabet();
	}
	public PrintAlphabet(MyPrint myprint) {
		super();
		this.myprint = myprint;
	}
}
 
//打印数字的线程类
public class PrintCount implements Runnable{
	 private MyPrint myprint;
	@Override
	public void run() {
		myprint.printCount();
	}
	public PrintCount(MyPrint myprint) {
		super();
		this.myprint = myprint;
	}
}

 

//打印字母的方法
public synchronized  void printAlphabet(){
			for(;number<78;number++){
			   if(number%3==0){
				   try {
					wait();
				} catch
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值