我有一个预先填充的数组列表.我有多个线程将从数组列表中删除元素.每个线程调用下面的remove方法,并从列表中删除一个项目.以下代码是否给我一致的行为?
ArrayList<String> list = Collections.synchronizedList(new ArrayList<String>());
void remove(String item)
{
do something; (doesn't work on the list)
list.remove(item);
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
我的Linux机器上有16GB RAM,并使用-Xmx4096m参数将最大Java堆内存设置为4GB.但是当我开始我的过程时,我收到以下错误.
无效的最大堆大小:-Xmx4096m指定的大小超出了可表示的最大大小.无法创建Java虚拟机.
当我将值设置为2048m时,它工作正常.
是否有任何其他配置参数需要更改以增加堆大小?
提前致谢!
我有n个并行运行的线程,每个线程都有一些自定义逻辑.但是,我的要求是当任何线程完成执行时,所有其他线程应该停止执行并返回.
实现这个的最佳方法是什么?我想通过拥有一个共享的布尔变量来做到这一点.当任何线程完成执行时,它将设置布尔值.所有线程都定期读取此变量,并在设置时退出.
此外,我的自定义逻辑是一个无限循环,一旦我知道其他一些线程已经完成执行,我想在当前迭代后停止执行.
这样做的正确方法是什么?
我在名为"MyClass"的类中有一个静态的"Builder"类.如果我尝试从两个线程同时使用构建器创建两个MyClass实例,它会安全吗?可以将一个线程设置的值分配给另一个线程创建的对象吗?
码:
public class MyClass {
private int height;
private int weight;
private MyClass(Builder builder) {
height = builder.height;
weight = builder.weight;
}
public static class Builder {
private int height;
private int weight;
public Builder height(int h) {
height = h;
return this;
}
public Builder weight(int w) {
weight = w;
return this;
}
public MyClass build() {
return new MyClass(this);
}
}
}
Run Code Online (Sandbox Code Playgroud)