Ali*_*zan 3 java heap multithreading memory-management
好的,所以我意识到所有线程共享堆,其中包含为java程序分配的所有对象.这意味着如果多个线程尝试分配新对象,那么它们可能会互相混乱并导致分段错误.在阅读了一些其他线程之后,我仍然不明白是否有一种无锁,安全的方法来构造一个线程内的对象.我正在尝试在java中为学校项目实现一个无锁的hashmap,并且需要弄清楚构造函数调用我是否是线程安全的.如果没有,是否有某种解决方法或内存管理技术可以用来使事情有效?
这是我的内部课程的样子
public class dataNode<T> extends node<T>{
int hash;
T data;
public dataNode(int _hash, T _value){
this.isArrayNode = false;
this.hash = _hash;
this.data = _value;
}
}
Run Code Online (Sandbox Code Playgroud)
而我的无锁hashmap的另一个类内部:
import java.util.concurrent.atomic.*;
public class arrayNode<T> extends node<T>{
//this is an array where elements consist of datanodes and arraynodes
AtomicStampedReference<node<T>> [] array;
public arrayNode(int size){
this.isArrayNode = true;
array = new AtomicStampedReference[size];
for (int i = 0; i < size; i++){
array[i] = new AtomicStampedReference<node<T>>(null, concurMap.UNINITIALIZED);
}
}
}
Run Code Online (Sandbox Code Playgroud)
dje*_*lin 10
这意味着如果多个线程尝试分配新对象,那么它们可能会互相混乱并导致分段错误.
我从来没有想过这个,但我认为我有足够的Java经验来说这只是假的.创建对象是线程安全的.
但是,您正在创建的对象的构造函数当然必须包含线程安全代码.
| 归档时间: |
|
| 查看次数: |
597 次 |
| 最近记录: |