従来の意味でポインターに直接アクセスできないため、Java では参照として知られています。(ほとんどの場合、すべての参照は常に値によって渡されるポインターであり、唯一の正当な操作はそれを逆参照することであるため、それを考えるのは「安全」です。これはC++ の「参照」と同じではありません。)
スレッド間で参照を確実に共有できます。ヒープ上にあるものはすべて、それへの参照を取得できる任意のスレッドで表示および使用できます。Runnable
静的な場所に配置するか、データを指すように参照の値を設定できます。
public class SharedDataTest {
private static class SomeWork implements Runnable {
private Map<String, String> dataTable;
public SomeWork(Map<String, String> dataTable) {
this.dataTable = dataTable;
}
@Override
public void run() {
//do some stuff with dataTable
}
}
public static void main(String[] args) {
Map<String, String> dataTable = new ConcurrentHashMap<String, String>();
Runnable work1 = new SomeWork(dataTable);
Runnable work2 = new SomeWork(dataTable);
new Thread(work1).start();
new Thread(work2).start();
}
}