gpt4 book ai didi

java - 如何证明使用静态变量是一个巨大的错误?

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

一般java开发者都知道必须用“synchronized”来控制一个个方法的执行,但是我看到下面的代码选择了static变量来控制,我无法模拟条件来证明方法出错,如何修改代码输出大于1000的值?

public class ThreadJunk implements Runnable{
private Info info;
public ThreadJunk(Info info) {
this.info = info;
}
public static void main(String args[]) throws Exception {

for(int j=0;j<100;j++) {
Info ii = new Info();
for(int i=0;i<1000;i++) {
Thread t = new Thread(new ThreadJunk(ii));
t.start();
}
System.out.println(ii.getValue());
}
}
@Override
public void run() {
info.addValue();
}
}

class Info {
public static boolean IS_LOCKED = false;
private int value = 0;
public void addValue() {
if(IS_LOCKED)
return;
IS_LOCKED = true;
value++;
IS_LOCKED = false;
}
public int getValue() {
return value;
}
}

在我的电脑里,我从来没有得到超过1000的结果

最佳答案

查看您的这部分代码:

Info ii = new Info();
for (int i = 0; i < 1000; i++) {
Thread t = new Thread(new ThreadJunk(ii));
t.start();
}

对于每个 Info 对象,您创建的线程不超过 1000。您不应期望 value 字段的递增次数超过 1000

关于java - 如何证明使用静态变量是一个巨大的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15085867/

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