2013-03-10 2 views
2

내가 가지고있는 다음과 같은 두 개의 클래스 :자바 : 스레드 안전 클래스 인스턴스

public class MyClass { 

    public static void faceTheWorld(String Input){ 
     SafeClass sC = new SafeClass(); 
     sC.workWithInput(Input); 
    } 
} 

public class SafeClass { 
    public void workWithInput{String allInp) 

    work with allInp... 
} 

내 질문입니다. 같은 시간에 MyClass.FaceTheWorld()를 여러 번 호출하면 항상 SafeClass의 새 클래스 인스턴스를 만들거나 'sC'라는 동일한 인스턴스를 항상 만들려고합니까?

같은 인스턴스를 동시에 만들지 않도록 인스턴스 배열을 만들어야합니까? 자바에서 어떻게 보이나요?

궁극적으로 내가 달성하고자하는 것은 '입력'으로 FaceTheWorld를 호출하면 항상 '입력'이 스레드로부터 안전하다는 것을 확인하는 것입니다. 다른 인스턴스는 수정할 수 없으며 액세스 할 수 없습니다.

SafeClass를 동기화하면 문제가 해결됩니까?

많은 감사

만큼 당신이 방금 새로운 인스턴스를 만들 경우 다른 스레드 (클래스의 멤버, 또는 정적 변수) 당신이 어떤 경쟁 조건을 가지고하지 않습니다에 의해 변경 될 수있는 변수에 액세스하지 않는
+0

Java 명명 규칙을 따르는 것이 좋습니다. – AmitG

+0

안녕하세요, Amit, 당신은 무엇을 의미합니까? – L4zl0w

+0

은 메서드 이름을 쓰는 동안 낙타의 경우를 사용하고 클래스 이름을 쓰는 동안 파스칼 케이스를 사용합니다 (클래스 이름을 따랐을 때) – AmitG

답변

1

매번 새로운 인스턴스가 만들어 지므로 호출하는 메서드 내에서 정적 변수를 사용하는 개체와 같이 우리에게 알려주지 않은 이상한 것들을 제외하고 스레드로부터 안전해야합니다. 그러나 두려움이 있다면 각 호출마다 같은 객체를 사용하게 될 것입니다.

+0

감사합니다. 케빈. 나는 이제 이것에 편집증이있어, 다시 확인하기 위해서. 코드에서 우리는 새로운 인스턴스 'C'를 생성하고 있지만, 메모리에서 항상 다른 인스턴스가 될 것입니다. 감사합니다 – L4zl0w

+0

@ L4zl0w 올바른 –

1

정적 메소드 (또는 다른 메소드). 각 메소드마다 고유 한 스택 스택이 있기 때문입니다.

그리고 귀하의 질문에 구체적으로 :

그것은 항상 새로운 인스턴스를 생성합니다.

1

얼마나 자주 초기화 할지라도 항상 새로운 인스턴스를 생성합니다. 동기화 키워드는 귀하의 문제를 해결하지 못합니다.