java多线程资源同步问题

最近在做多线程同步的时候发现的小问题,我想用最简单的方式达到多线程同步,可是事情就出现异常了

废话不多说,请看源代码:

public class testrunnable {
	public static void main(String[] args) {
		Mythread thread1=new Mythread();
		new Thread(thread1).start();
		new Thread(thread1).start();
	}
}
class Mythread implements Runnable{
	private int i=30;
@Override
public void run() {
	while(i>0)
	{
		System.out.println("运行结果"+this.i--);
		try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}
	}
}
}

执行结果:

运行结果30
运行结果29
运行结果28
运行结果28
运行结果27
运行结果27
运行结果26
运行结果26
运行结果25
运行结果25
运行结果24
运行结果23
运行结果22
运行结果22
运行结果21
运行结果21
运行结果20
运行结果20
运行结果19
运行结果19
运行结果18
运行结果18
运行结果17
运行结果17
运行结果16
运行结果16
运行结果14
运行结果15
运行结果13
运行结果13
运行结果12
运行结果11
运行结果10
运行结果10
运行结果9
运行结果9
运行结果7
运行结果8
运行结果6
运行结果6
运行结果5
运行结果5
运行结果3
运行结果4
运行结果2
运行结果2
运行结果1
运行结果1


从中间我们看的每隔一秒执行一次,有的两线程执行结果不同,可是大部分执行结果相同:按理论说应该是两线程共同完成从30到0的打印,而且不会出现重复才对,可是现在为什么这么多重复值的出现呢?

有高人能帮助我将这个修改成为资源同步处理的请教教我,谢谢!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值