지금 자바 스레딩에 대해 자세히 배우려고하고 있는데, 나는 작은 질문을 가지고 어디서나 직접 대답을 찾을 수 없습니다. 이 코드의 해봐요 섹션에있을 때스레드 및 잠금에 관한 질문
public class FooA implements Runnable
{
Object data;
public FooA(final Object newData)
{
data = newData;
}
public void doSomething()
{
synchronized(data)
{
data = new Integer(1);
}
}
public void run() {
// Does stuff
}
}
public class FooB implements Runnable
{
Object data;
public FooB(final Object newData)
{
data = newData;
}
public void doSomething()
{
synchronized(data)
{
System.out.println(data);
}
}
}
겠습니까으로 fooA 블록으로 fooB : 내가 두 주 threadsthat 객체를 두 가지가 있다고 가정하자? 혹은 그 반대로도? 내 직감은 예라고하지만 책에 따르면 나는 그것을 읽고있다. 따라서 모니터 객체가 필요합니다. 약간 더 복잡한 버전을 만들었고 모든 것이 잘 작동했습니다.
약간 둘러 보았지만 구체적인 답을 찾을 수 없었습니다.
:
나는이 책을 읽고 권하고 싶습니다? – UberJumper
FooA가 다른 객체를 가리키고 있다면, 데이터 항목에 새로운 값을 할당함으로써 FooB는 결코 알지 못하며 알 필요도 없습니다. 이것은 문제가되지 않습니다. – djna
@uberjumper - 데이터가 * 불변 *일까요? 'data'에 새로운 객체가 할당되어 있지 않으면 (즉,'data' 필드 자체는 변이되지 않습니다), 두 객체 모두'data' 필드에 할당 될 동일한 객체로 생성됩니다. 그렇다면 양쪽 모두 제대로됩니다. '데이터'에 동기화 될 때마다 서로를 차단합니다. –