当前位置: 代码迷 >> J2SE >> JAVA多线程有关问题,求教
  详细解决方案

JAVA多线程有关问题,求教

热度:224   发布时间:2016-04-24 01:34:09.0
JAVA多线程问题,求教
最近在学习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了
------解决方案--------------------
探讨

引用:
有可能一个线程刚要打印1的时候,1已经传入打印函数 但这时 时间片被其他的线程抢走了。后来再轮到该线程打印的时候就打印出1了

就是说打印的东西已经传进函数了,然后给打断了。。。这有点厉害啊,我以为只有执行完一条语句才能打断的,你说与电脑多核是否有关系
  相关解决方案