(JSF 관리 Bean의 일부로) 조치 리스너가있는 클래스가 있습니다. 액션 리스너 내부의 코드는 다른 클래스의 새 객체를 생성합니다. 이 개체는이 클래스의 기능을 호출하기 위해 사용되는 클래스 A. .. 차례로리소스를 액세스하는 스레드가 1 개만 필요합니다.
public void invokeActionListener(ActionEvent act)
{
MyClass myclass=new MyClass();
myclass.invokeRequest();
}
invokeRequest 기능 일부 데이터가 함수 B를 다른 기능 C. C의 호출에 D를 호출하는 다른 함수 B를 호출하여 처리 한 후 및 흐름은 끝납니다 ..
invokeRequest가 D가 끝날 때까지 전체 흐름이 완료 될 때까지 한 번만 호출해야하는 경우를 원합니다.
function invokeRequest()에서 동기화하지만 동기화가 작동하지 않습니다. 다른 스레드는 1 개의 스레드가 여전히 작동 중일 때에도이 함수를 호출 할 수 있습니다.
Class MyClass
{
public synchronized void invokeRequest()
{
invokeRequestB();
}
public void invokeRequestB()
{
invoke RequestC();
}
public void invokeRequestC()
{
invoke RequestD();
}
public void RequestD()
{
//Complete processing and end the flow.
}
안내하시기 바랍니다 .....
하지만이 개체의 범위는 무엇입니까? Lock .. ??. 페이지의 단추를 한 번 클릭 할 때마다 MyClass의 새 개체를 만들고이 새 개체로 invokeRequest 함수를 호출합니다. 나는 새로운 객체가 Synchronize 블록에 입력 될 때마다 스레드가 어떤 잠금도 획득하지 못하기 때문에 그것을 이해했습니다. 하지만 정적 최종 객체를 사용하는 것이이 클래스의 유용한 목적 일 수 있습니다 ... 단서 없음 ... !! – AngelsandDemons
모든 클래스 인스턴스가 정적 var 인스턴스를 공유합니다. 그래서 정적 변수는 "클래스 변수"라고도합니다. – Fildor
@AngelsandDemons 예제 코드에서 호출은 개체 자체를 잠금에 사용하지만 클릭 할 때마다 새 호출이 만들어 지므로 많은 호출이 병렬로 실행될 수 있습니다. 정적 필드 (또는 클래스)를 사용하여 한 번에 하나의'invokeRequest()'만 실행하면 결과를 동기화 할 수 있습니다. * MyClass 인스턴스 *에서. (그것이 내가 원한 것으로 이해 한 것입니다. 그렇지 않다면 답을 삭제할 것입니다) – kiheru