最近在学习java,多线程的时候发现了问题
代码在下面,想实现3个线程共享统一资源出错,有意故意实现出错
感觉只有可能出现 连续输出同一个数/跳过某个数输出/正常输出三种情况,但事实出现如下情况
1 1 2 1 4 6 7 8 9 5 10 11 12 13 14 3 15 16 17 18 19 20
第四个位置如何能出现1?想不通,代码在下面
- Java code
public class ThreadUse2 implements Runnable { public int id = 1; public static void main(String[] args) { ThreadUse2 tr = new ThreadUse2(); Thread t1 = new Thread(tr); Thread t2 = new Thread(tr); Thread t3 = new Thread(tr); t1.start(); t2.start(); t3.start(); } public void run() { while (id <= 20) { System.out.print(id + " "); Thread.yield(); id++; } }}
------解决方案--------------------
有可能一个线程刚要打印1的时候,1已经传入打印函数 但这时 时间片被其他的线程抢走了。后来再轮到该线程打印的时候就打印出1了
------解决方案--------------------