搜索

首页  >  问答  >  正文

java - new了2个Thread,为什么不是交叉打印?

public static void main(String[] args){

        new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i=0; i<10; i++){
                    System.out.print(i+" ");
                }
            }
        }).start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i=0; i<10; i++){
                    System.out.print(i+" ");
                }
            }
        }).start();
    }

输出结果如下:

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 
PHPzPHPz2802 天前1506

全部回复(13)我来回复

  • 阿神

    阿神2017-04-18 10:29:18

    1、控制使得线程锁的顺序保持一致,可以使用java.util.concurrent.locks包里灵活的锁
    2、使用java.util.concurrent.atomic包的原子类

    回复
    0
  • 巴扎黑

    巴扎黑2017-04-18 10:29:18

    CPU的执行太快了,第一个线程很快就执行完了,第二个线程估计还没有创建好,把循环的值改到1000试试,应该就能看出来效果了但肯定不会是交叉的,是混乱的

    回复
    0
  • 高洛峰

    高洛峰2017-04-18 10:29:18

    CPU执行任务是乱序执行,不保证多线程之间的同步,如果要保证顺序,需要做同步控制

    回复
    0
  • 取消回复