gpt4 book ai didi

Java 并发 - 这有效吗?

转载 作者:行者123 更新时间:2023-12-03 23:13:28 28 4
gpt4 key购买 nike

System.out.println("Enter the number of what you would like to do");
System.out.println("1 = Manually enter Options");
System.out.println("2 = Use a text file to pick from pre-existing models");
System.out.println("3 = Exit ");


Scanner sc = new Scanner(System.in);
try {
runType = sc.nextInt();
if(runType > 3) {
throw new badValue(999, "Not the valid input");
}
} catch (NullPointerException e) {
} catch (badValue e) {
e.correctBadValue(runType);
}

switch (runType) {
case 1:
Thread a = new SelectCarOption();
a.run();
case 2:
Thread a2 = new BuildCarModelOptions();
a2.run();
case 3:
System.exit(1);

}

}

基本上,我正在尝试运行一个程序,其中正在运行的线程由变量 runType 确定。如果 runType 是一个值,则某个线程将运行,如果是另一个,则另一个将运行。我的方法是最有效的吗?结果会出错吗?

最佳答案

长话短说,不,这不是您想做事的方式。

  1. thread1.run()不会启动新线程,它只是调用 run() 中的代码在当前线程上。你要的是thread1.start() .
  2. thread1.sleep(5000)不会做 thread1 sleep ,它将使 线程 sleep 。 Thread.sleep是影响当前线程的静态方法,您使用实例变量调用它(而不是更传统的 Thread.sleep(5000) )这一事实不会改变这一点。
  3. 开始thread2没有意义然后立即加入其中。您也可以直接在主线程上调用它的代码。 (这就是你现在正在做的,因为你正在调用 thread2.run() 而不是 thread2.start() 。)

我不确定您的最终目标是什么,但这听起来像是普通的旧多态性的情况。创建 Runnable并根据输入将其分配给两个具体实现之一;然后调用 run()在上面。像这样的东西:

Runnable selectStrategy = (runType == 2)
? new CarModelOptionsIO()
: new SelectCarOption()

selectStrategy.run()

如果您需要此操作的结果,您可以使用 Callable<T> (不要让包名称让您感到困惑;该接口(interface)中的并发性没有任何固有的东西)或者甚至创建您自己的接口(interface),这可以让您为方法提供更有意义的名称(callrun 是非常无用的通用名称) .

关于Java 并发 - 这有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18153127/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com