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

为什么在以下代码中FirstThread总是在SecondThread之前运行?

屠德宇
2023-03-14
问题内容
public class TowThreads {
    public static class FirstThread extends Thread {
        public void run() {
            for (int i = 2; i < 100000; i++) {
                if (isPrime(i)) {
                    System.out.println("A");
                    System.out.println("B");
                }
            }
        }

        private boolean isPrime(int i) {
            for (int j = 2; j < i; j++) {
                if (i % j == 0)
                    return false;
            }
            return true;
        }
    }

    public static class SecondThread extends Thread {
        public void run() {
            for (int j = 2; j < 100000; j++) {
                if (isPrime(j)) {
                    System.out.println("1");
                    System.out.println("2");
                }
            }
        }

        private boolean isPrime(int i) {
            for (int j = 2; j < i; j++) {
                if (i % j == 0)
                    return false;
            }
            return true;
        }
    }

    public static void main(String[] args) {
        new FirstThread().run();
        new SecondThread().run();
    }
}

输出显示FirstThread始终在SecondThread之前运行,这与我阅读的文章相反。

为什么?第一个线程必须在第二个线程之前运行?如果没有,您能给我一个很好的例子吗?谢谢。


问题答案:

使用开始不运行

public static void main(String[] args) {
        new FirstThread().start();
        new SecondThread().start();
    }

如果使用run方法,则调用第一个方法,然后调用第二个方法。如果要运行并行线程,则必须使用线程的启动方法。



 类似资料:
  • 问题内容: 我想知道以下代码的行为背后的机制是什么: 我的理解是不 返回 函数,而是 关闭连接/结束请求 。这可以解释为什么我仍然可以在命令后执行代码(我查看了快速源,但它似乎不是异步函数)。 还有其他我可能会想念的东西吗? 问题答案: 当然可以结束HTTP响应,但是它对您的代码没有做任何特殊的事情。 即使您已结束回复,也可以继续做其他事情。 但是,您 无法 做的是利用进行任何有用的操作。由于响应

  • 如果(新名称) 我可以理解在vanillaJS中检查newName是否真实,但在Typescript中,这是为了什么?Typescript已经保证newName是string,并且它具有。长度属性。 完整代码在这里:https://www.typescriptlang.org/docs/handbook/classes.html

  • 以下代码中的“-97”是什么意思? 我们创建了一个由26个LinkedList组成的数组来模拟字典。每个列表包含以“a”、“b”、“c”、......“z”开头的所有单词。代码是由讲师给出的。 这里是附注: 在特定MyLinkedList中搜索单词的步骤 假设要搜索的单词位于名为wordstr的String类型变量中。 将允许您跳转到正确的链接列表,并且包含将返回true/false,这取决于单词

  • 问题内容: 我在最后一行遇到异常: 我猜这与iPhone 5S是64位而iPhone 5S不是64位有关,但是我在上面的函数中看不到任何处理64位的东西吗? 编辑 通过以下调整,我可以解决此问题,但是我仍然无法解释原因。 问题答案: 的整数类型是在iPhone 5 32位整数,在一个5S 64位整数。由于返回的值是iPhone 5 的正范围的两倍,因此您的第一个版本基本上有50%的机率在此行崩溃:

  • 问题内容: 我只是想简化我的一个类,并以与flyweight设计模式相同的样式介绍了一些功能。 但是,对于为什么总是调用after ,我有点困惑。我没想到这一点。谁能告诉我为什么会这样,否则我如何实现此功能?(除了将实现放入hack之外)。 这是一个例子: 输出: 为什么? 问题答案: 使用 时,你需要控制一个新实例的创建。 使用 时,你需要一个新的实例的控件初始化。 是实例创建的第一步。首先调用