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

发布于 2022-09-04 07:12:38 字数 617 浏览 11 评论 0

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 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(13

独﹏钓一江月 2022-09-11 07:12:38

cpu的执行速度太快,数字太小看不出差距.要是我,起码Integer.MaxValue.

南城追梦 2022-09-11 07:12:38

如果没有同步锁,这两个线程是不会出现你说的交叉打印的,线程的执行的优先级在于谁先获取了cpu资源,你的程序并不能保证哪个线程先执行。再好好看看java多线程知识吧。

无妨# 2022-09-11 07:12:38

设置的次数太少,如果你设置100个数就能看到俩个线程交叉(这里的交叉不是线程1打印一个数,线程2马上打印一个数,而是一段一段的)打印的效果;cpu抢到资源就执行了。你要实现交叉打印的话,那是个生产这与消费者的例子。

黯然 2022-09-11 07:12:38

就输出完10个数字太快了,把10改成100试试。

錯遇了你 2022-09-11 07:12:38

加上个线程休眠时间

涫野音 2022-09-11 07:12:38

0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 我的是这样的!自己想吧

雪落纷纷 2022-09-11 07:12:38

在两个for循环里面输出语句前加上Thread.sleep(1000);
再试试吧

像你 2022-09-11 07:12:38

线程是不保证执行顺序的。

野稚 2022-09-11 07:12:38

线程的执行顺序是不确定的,谁抢占到cpu谁就执行,十个数字的顺序也不一定是你这样的,你多执行几次就会出现不同的结果。而且线程的优先级也无法保障线程的执行次序。只不过优先级高的线程获取 CPU 资源的概率大一点而已。

不念旧人 2022-09-11 07:12:38
public void run() {
                for (int i=0; i<10; i++){
                    System.out.print(i+" ");
                    Sleep(1000);
                }
            }

这样能看到比较明显的交叉打印现象,但实际上并发指的是我们无法得知哪个线程先执行哪个线程后
执行,而不是一定会交叉。夸张地说,对两个线程的分别m, n条汇编指令做插入,可以有
C_{m+n-1}^{min(m,n)}阶乘级别多的执行顺序。

带刺的爱情 2022-09-11 07:12:38

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

微暖i 2022-09-11 07:12:38

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

梦中楼上月下 2022-09-11 07:12:38

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文