代码之家  ›  专栏  ›  技术社区  ›  Amit

Java -线程问题在Sun教程中的一个

  •  2
  • Amit  · 技术社区  · 14 年前

    我在看这个 Sun's tutorial on Thread .

    我在那里找到了一个代码块,我认为可以用更少的代码行替换它。我想知道为什么sun的专业程序员在用更少的代码就能完成这项任务的时候会走这么长的路。

    我问这个问题是为了知道如果我遗漏了教程想要传达的内容。

    代码块如下:

        t.start();
    
        threadMessage("Waiting for MessageLoop thread to finish");
        //loop until MessageLoop thread exits
        while (t.isAlive()) {
            threadMessage("Still waiting...");
            //Wait maximum of 1 second for MessageLoop thread to
            //finish.
            t.join(1000);
            if (((System.currentTimeMillis() - startTime) > patience) &&
                    t.isAlive()) {
                threadMessage("Tired of waiting!");
                t.interrupt();
                //Shouldn't be long now -- wait indefinitely
                t.join();
            }
    
        }
        threadMessage("Finally!");
    

    我认为上述代码可以替换为以下代码:

    t.start();
    t.join(patience); // InterruptedException is thrown by the main method so no need to handle it
    
    if(t.isAlive()) {
        // t's thread couldn't finish in the patience time
        threadMessage("Tired of waiting!");
        t.interrupt();
        t.join();
    }
    
    threadMessage("Finally!");
    
    2 回复  |  直到 10 年前
        1
  •  4
  •   Xorty    14 年前
    t.join(1000) 
    

    这段代码实际上不应该是尽可能聪明的,但我想它是用来演示用法的

        2
  •  0
  •   aamit915    10 年前

    这个例子是为了传达两个线程,main和您启动的线程,同时运行。代码实际上并没有做任何有用的事情,但是suns的示例将显示“仍然在等待…”,其中散布着来自打印字符串的线程的消息。

    如果你以鳕鱼的实际行为来看,是的,它们都做同样的事情。 两个例子 1)起始螺纹T 2)将等待 patience 毫秒 3)中断线程T 4)等待死亡 5)从主线程打印“finally”