に参加:スレッドは、メソッドを使用するにもかかわらず、実行していない私は、このコードのために、この出力を得るなぜ私はかなり理解していない
public class Example {
static void threadMessage(String message) {
String threadName =
Thread.currentThread().getName();
System.out.format("%s: %s%n", threadName, message);
}
private static class MessageLoop implements Runnable {
public void run() {
String importantInfo[] = {
"Line 1",
"Line 2",
"Line 3",
"Line 4"
};
try {
for (int i = 0; i< importantInfo.length; i++) {
// Pause for 4 seconds
Thread.sleep(4000);
// Print a message
threadMessage(importantInfo[i]);
}
} catch (InterruptedException e) {
;
}
}
}
public static void main(String args[]) throws InterruptedException {
threadMessage("Starting MessageLoop thread");
Thread t = new Thread(new MessageLoop());
t.start();
threadMessage("Waiting for MessageLoop thread to finish");
while (t.isAlive()) {
threadMessage("Still waiting...");
// Wait maximum of 1 second
// for MessageLoop thread
// to finish.
t.join(1000);
}
threadMessage("Finally!");
}
}
出力:
main: Starting MessageLoop thread main: Waiting for MessageLoop thread to finish main: Still waiting... main: Still waiting... main: Still waiting... main: Still waiting... main: Still waiting... Thread-0: Line 1 main: Still waiting... main: Still waiting... main: Still waiting... main: Still waiting... Thread-0: Line 2 main: Still waiting... main: Still waiting... main: Still waiting... Thread-0: Line 3 main: Still waiting... main: Still waiting... main: Still waiting... main: Still waiting... Thread-0: Line 4 main: Finally!
を私は内部のこの文を書いた場合ループは、スレッドメインはその実行を続けます。そのスレッドtが終了した後、スレッドmainがその実行を継続すべきではないと想定されていますか?
t.join(1000);
ただし、ブールは実行を続けます。一方、(t.isAliveは()) - - 私の知る限りでは、これらの2行は、メイン スレッドに属しthreadMessage(「まだ待っている...」)
私は、このリンクの例を理解しようとしています:
ご協力いただきありがとうございます。
?あなたはどんなアウトプットを期待していますか? –