当前位置: 首页 > 面试题库 >

多线程中不需要的输出

聂炜
2023-03-14
问题内容

class mythread implements Runnable {

    Thread t1;
    String name = "";

    public mythread(String thname) {
         name = thname;
         t1= new Thread(this, name);
         System.out.println(t1);
         t1.start();
         System.out.println(t1.getName());
     }
     @Override
     public void run() {
         for (int i=5;i>0;i--){
             try {
                System.out.println(Thread.currentThread());
                 System.out.println("child Thread" + i);
                 Thread.sleep(2000);
             }  catch(InterruptedException e){
                System.out.println("Child Thread Interrupted");
             }
         }
     }
}

public class Mainthread {
   public static void main(String[] args) {
        mythread m1 = new mythread("Rohan");
        mythread m2 = new  mythread("Jain");

        try {
            for(int i=5;i>0;i--){
                System.out.println("Main Thread" + i);
                 Thread.sleep(2000);
            }
        } catch(InterruptedException e){
            System.out.println("Main Thread Interrupted");
        }
    }
}

输出为:

Thread[Rohan,5,main]
Rohan
Thread[Jain,5,main]
Thread[Rohan,5,main]
child Thread5
Jain
Main Thread5
Thread[Jain,5,main]
child Thread5
Main Thread4
Thread[Rohan,5,main]
child Thread4
Thread[Jain,5,main]
child Thread4
Main Thread3
Thread[Rohan,5,main]
child Thread3
Thread[Jain,5,main]
child Thread3
Main Thread2
Thread[Jain,5,main]
Thread[Rohan,5,main]
child Thread2
child Thread2
Thread[Rohan,5,main]
child Thread1
Thread[Jain,5,main]
child Thread1
Main Thread1

但是我想要的输出就像首先应该在线程“ rohan”中打印5,然后在“ jain”中打印5,然后在线程“ main”中打印5,依此类推…请帮助..
!!!!!!


问题答案:

这些问题确实使我感到困惑。线程的全部要点是它们并行 异步
运行,因此我们可以获得更好的性能。由于硬件,竞争条件,时间分段随机性和其他因素,无法预测线程的运行顺序。任何询问线程程序中特定输出顺序的人都不应使用线程。



 类似资料:
  • 我在我的第一个java程序中扫描用户输入时遇到了一些麻烦。当我编译并运行它时,会立即提示输入(即命令行停止并闪烁)。当我输入任何东西时,第一行被打印出来,要求我输入一个整数。然后打印第二行,并提示我输入另一个值。 这个程序的输出是我输入的前两个值。这很难解释,但它基本上要求3个输入值,只使用两个。

  • 问题内容: 如果您依赖具有全局解释器锁(即CPython)的Python实现并编写多线程代码,那么您真的需要锁吗? 如果GIL不允许并行执行多个指令,那么共享数据是否有必要保护吗? 抱歉,这是一个愚蠢的问题,但这是我一直想知道的关于多处理器/核心计算机上的Python的东西。 同样的情况也适用于具有GIL的任何其他语言实现。 问题答案: 如果您在线程之间共享状态,则仍然需要锁。GIL仅在内部保护解

  • 在MSDN中,有这样一段话: 但我不知道加粗文字的确切含义,所以我似乎不需要更多的帮助。那么,为什么它在不使用线程的情况下变为异步呢? 来源:http://msdn.microsoft.com/en-us/library/hh191443.aspx

  • 我真的被系统搞糊涂了。python中的exit()。在python文档中,它表示“退出python”;这是否意味着当在python程序中被调用,进程将退出吗?如果是,下面的代码将显示不同的结果: 在linux中启动这个程序,结果并不像python文档所说的那样是预期的,但仍然在系统中运行,所以真的要退出吗?

  • 问题内容: 我需要在性能关键的环境中使用MessageDigest对来自多个线程的多个键进行哈希处理。我知道MessageDigest不是线程安全的,因为它在其对象中存储其状态。什么是实现密钥的线程安全哈希的最佳方法? 用例: 特别: ThreadLocal是否可以保证正常工作?它会有性能损失吗? getInstance返回的对象是否不同,并且它们不会互相干扰?文档说“新”对象,但是我不确定它是否

  • 问题内容: 我只是想知道我们是否真的需要算法是多线程的,如果它必须利用多核处理器,或者jvm是否要利用多核处理器,即使我们的算法是顺序的? 问题答案: 我不相信任何当前的生产JVM实现都可以执行自动多线程。他们可能会使用其他核心进行垃圾回收和其他内部管理,但是如果您的代码是顺序表达的,则很难自动并行化它并仍然保留精确的语义。 有 可能 是一些实验/研究的JVM其中设法并行的代码的JIT可以当场为尴