gpt4 book ai didi

java - 你如何确定哪个线程将首先运行?

转载 作者:行者123 更新时间:2023-11-29 04:11:02 26 4
gpt4 key购买 nike

我有这个练习,但我不明白正确答案的原因:

 import java.util.Iterator; 
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;

public class Cache {
static ConcurrentHashMap<String, Object> chm = new ConcurrentHashMap<String, Object>();
public static void main(String[] args) {
chm.put("a", "aaa");
chm.put("b", "bbb");
chm.put("c", "ccc");
new Thread(){
public void run(){
Iterator<Entry<String, Object>> it = Cache.chm.entrySet().iterator();
while(it.hasNext()){
Entry<String, Object> en = it.next();
if(en.getKey().equals("a") || en.getKey().equals("b")){
it.remove();
}
}
}
}.start();

new Thread(){
public void run(){
Iterator<Entry<String, Object>> it = Cache.chm.entrySet().iterator();
while(it.hasNext()){
Entry<String, Object> en = it.next();
System.out.print(en.getKey()+", ");
}
}
}.start();
}
}

有 4 个可能的答案:

  1. 它可以打印键的任意组合。
  2. 它可以打印任何组合,除了:c,
  3. 它可以打印任何组合,除了:a, or b, or a, b, or b, a
  4. 它可以打印任何组合,除了:b, c,

本练习的正确答案是 3。

为什么这是正确答案?

我认为这个练习可能会打印键的任意组合,因为这个 main 中有两个线程,所以我不知道两者中的哪一个会先启动。如果第二个线程首先启动,我将拥有 ConcurrentHashMap 中的所有键,因此它将打印 a 和 b。所以,我对这个练习的答案是 1。但是这个练习认为它是错误的答案。为什么?

如何确定哪个线程首先启动?

非常感谢!

A.

最佳答案

除了先创建一个线程之外,无法预先确定哪个线程将首先启动。

它只依赖于作为 JVM 一部分的 Scheduler。它负责Thread的管理。

如果您想等待第一个线程然后启动第二个线程,您可以轻松地使用 firstThread.join() 然后启动第二个线程。

关于java - 你如何确定哪个线程将首先运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55139259/

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