2014-04-25 3 views
0

그래서 나는 나를 위해 복잡한 자바를 파고있다. 나는 멀티 쓰레딩을보고 있는데, 두 개의 다른 쓰레드에 같은 객체 인스턴스를 보낼 때 객체의 인스턴스를 두 개의 쓰레드에있는 두 개의 개별 인스턴스 변수에 할당하는 것에 대해 궁금해했다. 자바가 이것을 원래 객체의 동일한 인스턴스로 보는가? 스레드에 대한 것입니까? 예를 들어Java에서 다중 스레드, 참조 객체

제조자의 실행 방법에서 변수의 값을 변경

public Producer(int accesses, SharedCell cell) { 
    super("Producer"); 
    this.accesses = accesses; 
    this.cell = cell; 
} 

public Consumer(int accesses, SharedCell cell) { 
    super("Consumer"); 
    this.accesses = accesses; 
    this.cell = cell; 
} 

을 내 드라이버

SharedCell share = new SharedCell(); 
Producer p = new Producer(accessCount, share); 
Consumer c = new Consumer(accessCount, share); 

와 스레드

SharedCell 객체 및 컨슈머의 run 메소드는 해당 변수에 액세스합니다. 이것들은 그렇게하는 것을 막기로되어있다.

그래서 Consumer 및 Producer의 셀은 드라이버가 보낸 동일한 객체를 참조합니까?

답변

1

개체는 대부분의 언어와 마찬가지로 Java에서 참조 형식입니다. 예를 들어 소비자 및 생산자가 모두 메모리의 동일한 개체를 가리키는 경우를 의미합니다. 그리고 아니요, 스레드에만 국한되지 않습니다. 단일 스레드에서도 동일한 객체에 대한 참조를 갖습니다.