gpt4 book ai didi

Java 线程和同步列表

转载 作者:行者123 更新时间:2023-11-30 03:56:12 25 4
gpt4 key购买 nike

我一直在学习java并尝试线程和使用synchronizedlist。

package Multithreading;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main {
public static void main(String[] args){

List<Integer> list = Collections.synchronizedList(new ArrayList<Integer>(10));
for(int i=0; i<10; i++){
list.add(0);
}
Thread a = new Thread(new CardPicker(list));
Thread b = new Thread(new CardPicker(list));
Thread c = new Thread(new CardPicker(list));
Thread d = new Thread(new CardPicker(list));
Thread e = new Thread(new CardPicker(list));
Thread f = new Thread(new CardPicker(list));
Thread g = new Thread(new CardPicker(list));
Thread h = new Thread(new CardPicker(list));
a.start();
b.start();
c.start();
d.start();
e.start();
f.start();
g.start();
h.start();
int startTime = (int) System.currentTimeMillis();
while((int) System.currentTimeMillis()-startTime<10000){

}
System.out.println(list.toString());

}
}

package Multithreading;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class CardPicker implements Runnable{

List<Integer> list;
public CardPicker(List<Integer> list2){
this.list = list2;
}

@Override
public void run() {
Random rnd = new Random();
int hold = rnd.nextInt(10);
while(true){
list.set(hold, list.get(hold)+1);
}
}

}

不知何故,输出给了我这样的东西:

[13289041, 13038238, 0, 13427372, 10113077, 13023511, 15722188, 0, 12728814, 0]

[12532173, 0, 0, 12254025, 12406768, 16276566, 12638446, 16651720, 0, 0]

这些0从哪里来?谢谢

最佳答案

Where these 0s come from?

首先,您已在列表中添加了 10 个值为零的项目。

在下面的行中,您将替换随机索引处的值。

Random rnd = new Random();
int hold = rnd.nextInt(10);
while(true){
list.set(hold, list.get(hold)+1);
}

列表中有 8 个线程和 10 个值。现在,对于每个线程,仅生成一次随机数,这意味着在极端情况下,为每个线程生成不同的随机数,列表中仍然有 2 个索引未被替换。

您可以在 while 循环中移动到下面的行后重试,但仍然不能 100% 确定所有索引都被替换。它取决于Random的行为。

int hold = rnd.nextInt(10);

更多信息请查看Random#nextInt() .

关于Java 线程和同步列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23121390/

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