그때 여러 스레드를 생성, 내가 ArrayList에있는 오브젝트를 개시 다음과 유사한큰 개체 배열은 여러 스레드간에 공유됩니다. 스레드 안전 기술은
class Entry {
private String variable1 = null;
private int variable2 = 0;
public Entry (String variable1) {
this.variable1 = variable1;
}
/* getters and setters for variable1 and 2 are below */
}
에 객체의 큰 ArrayList에 있습니다. 각 스레드는 variable1의 내용이 문서에 포함되어 있는지 판별하기 위해 대량의 문서 집합을 검색합니다. 이 경우, 나는 아래로, 스레드와 관련된 유사한 항목의 사본을 만들고 싶어 :
public Entry(Entry entry) {
this(entry.getVariable1())
}
는 그때하지 원본을 복사의 변수 2의 내용을 변경하려는. 요약하려면 :
- 개체 값은 스레딩 전에 초기화됩니다.
- 개체가 여러 스레드에서 공유 (읽기 전용)됩니다.
- 개체를 수정해야 할 경우 개체 복사본이 만들어지고 복사본이 변경됩니다.
내 질문 사항은 다음과 같습니다.
- variable1과 variable2에 대한 getter와 setter를 동기화해야합니까? 스레드간에 공유 할 때 개체를 읽는 중이므로 불필요한 것 같습니다. 그러나 내가 틀렸다면 수정하십시오.
- 정보의 큰 arraylist를 공유하는 더 좋은 방법이 있습니까? (각 스레드에 대해 arraylist를 복사하고 싶지는 않습니다. 왜냐하면 200K 개 이상의 객체가 커지기 때문입니다)?
arraylist는 읽기 전용입니까? (아무 것도 추가하지 않고, 아무 것도 제거하지 않음을 의미합니다.) 대답이 '예'일 경우 안전하게 목록을 공유 할 수 있습니다. 그러나 개체 자체를 수정하면 동기화가 필요할 수 있습니다. – biziclop