多线程程序每次都有不同的输出 [英] Multithreading program has different output each time

查看:169
本文介绍了多线程程序每次都有不同的输出的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我尝试多次执行以下multhiThreading代码时,输​​出与前一个不同.是因为JVM行为还是其他原因.请帮我一个.

when I'm trying to execute the following multhiThreading code multiple times ,the output is not same as previous one . Is that because of JVM behaviour or may be some other reason . please help me some one.

program:


package example.thread.com;

class MyThread1 implements Runnable {
    Thread t;

    MyThread1(String s) {
        t = new Thread(this, s);
        t.start();
    }

    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println("Thread Name  :"
                    + Thread.currentThread().getName());
            try {
                Thread.sleep(2000);
            } catch (Exception e) {
            }
        }
    }
}


public class RunnableThread1 {
    public static void main(String args[]) {
        System.out.println("Thread Name :" + Thread.currentThread().getName());
        MyThread1 m1 = new MyThread1("My Thread 1");
        MyThread1 m2 = new MyThread1("My Thread 2");
    }
}

输出:如果我第一次运行

output: if i run 1st time

Thread Name :main
Thread Name  :My Thread 1
Thread Name  :My Thread 2
Thread Name  :My Thread 1
Thread Name  :My Thread 2
Thread Name  :My Thread 2
Thread Name  :My Thread 1
Thread Name  :My Thread 1
Thread Name  :My Thread 2
Thread Name  :My Thread 1
Thread Name  :My Thread 2

输出:如果我第二次运行

output: if i run 2nd time

Thread Name :main
Thread Name  :My Thread 2
Thread Name  :My Thread 1
Thread Name  :My Thread 2
Thread Name  :My Thread 1
Thread Name  :My Thread 2
Thread Name  :My Thread 1
Thread Name  :My Thread 1
Thread Name  :My Thread 2
Thread Name  :My Thread 1
Thread Name  :My Thread 2

输出:如果我第三次运行

output: if i run 3rd time

Thread Name :main
Thread Name  :My Thread 1
Thread Name  :My Thread 2
Thread Name  :My Thread 2
Thread Name  :My Thread 1
Thread Name  :My Thread 1
Thread Name  :My Thread 2
Thread Name  :My Thread 2
Thread Name  :My Thread 1
Thread Name  :My Thread 2
Thread Name  :My Thread 1

像这样,请建议.....

like this please suggest .....

推荐答案

这正是示例的重点.它表明线程是一时兴起地调度的,并且不能保证输出顺序发生.

This is precisely the point of the example. It shows that threads are scheduled at a whim and that output is not guaranteed to occur in order.

在其他编程语言和系统中,期望输出错误的消息并非没有道理,例如:

In other programming languages and systems it is not unreasonable to expect mangled output such as:

Thread Name :main
Thread Name  :My Thread 1
Thread NThread Name  :My Thread 2ame  :My Thread 2
Thread Name  :My Thread 1
Thread Name  :My Thread 2
Thread Name  :My Thread 1
ThreaThread Name  :My d Name  :My ThrThread 2ead 1
Thread Name  :My Thread 2
Thread Name  :My Thread 1

这篇关于多线程程序每次都有不同的输出的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆