0
class myRunnable implements Runnable {

    public void run() {
        // TODO Auto-generated method stub
        System.out.println("run");
    }

}

public class TestThread {

    public static void main(String[] args) {
        Runnable threadJob = new myRunnable();
        Thread t = new Thread(threadJob);
        t.start();
        for (int i = 0; i < 100000; i++) {
            System.out.println("main");
        }

    }
}

控制台中的结果:

主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要主要

我找不到任何“运行”字样,这意味着运行方法没有运行。有人可以为我解释一下吗。谢谢你。

PS:当i<10,i<100,i<1000,i<10000,我能找到“run”这个词,但是当i<100000时,我找不到“run”这个词,这很奇怪

在此处输入图像描述

4

5 回答 5

4

Run已打印出来。但是您的控制台缓冲区不够大。

将控制台配置更改为无限缓冲区。在此处输入图像描述

于 2015-01-26T12:25:53.213 回答
1

首先,是的,您的代码实际上打印“运行”。只需在下面进行这个小改动,您就会看到它。

一个更严格的测试,如果你能以不同的方式看到它,是将字符串发送到文本文件而不是控制台。你肯定会找到“运行”这个词。

class myRunnable implements Runnable {

  @Override
  public void run() {
    // TODO Auto-generated method stub
    System.out.println("run");
  }

}

public class TestThread {

  public static void main(String[] args) {
    Runnable threadJob = new myRunnable();
    Thread t = new Thread(threadJob);
    t.start();
    for (int i = 0; i < 100000; i++) {
      System.out.println("main");
      try {
        Thread.sleep(1000);
      }
      catch (InterruptedException e) {
        e.printStackTrace();
      }
    }

  }
}
于 2015-01-26T12:40:53.200 回答
0

您的实现运行良好。您只是看不到您的run消息,因为还没有任何线程切换。

问题是您检查线程的操作太短。你可以插入一个Thread.sleep(2000);例子来检查它。

于 2015-01-26T12:10:46.593 回答
0

我发现你在输出中找不到这个有线,run问题是你应该了解java线程机制是如何工作的,main线程不会等待线程完成他们的工作,除非你把它具体化,因此子线程是否在main线程完成(并退出)之前完成不是预期的。

如果您确实希望main线程等待child线程完成,您可以通过以下方式使其具体化:

 t.start();
 t.join();

您应该必须捕获一些异常才能使其正常工作。

但我认为您应该在原始代码中看到run打印的比例应该很高。因为似乎主线程更耗时。不管怎样,如果你的 jvm 表现得这样,就没有什么可责备的。无论如何,标准都不保证线程执行顺序。

于 2015-01-26T12:32:18.637 回答
0

只需在循环中添加一秒的延迟,如下所示:

class myRunnable implements Runnable {

    public void run() {
        System.out.println("run");
    }

}

public class TestThread {

    public static void main(String[] args) {
        Runnable threadJob = new myRunnable();
        Thread t = new Thread(threadJob);
        t.start();
        for (int i = 0; i < 100000; i++) {
            System.out.println("main");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

}
于 2015-01-26T12:35:22.357 回答