日期:2014-05-20  浏览次数:20733 次

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了

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