最近在做多线程同步的时候发现的小问题,我想用最简单的方式达到多线程同步,可是事情就出现异常了
废话不多说,请看源代码:
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的打印,而且不会出现重复才对,可是现在为什么这么多重复值的出现呢?
有高人能帮助我将这个修改成为资源同步处理的请教教我,谢谢!