2017-04-24 4 views
3

메서드를 동기화하는 데 다음과 같은 책임이 있습니다. main() 메서드를 synchronized로 선언하면 .jar 파일 (주()만으로 구성된)이 동시에 두 번 실행되지 않도록 할 수 있습니까?

그래서이 토론에 읽기 : Declaring the main method synchronized

나는 그것을 읽을 수 있습니다

가 동기화되는 것은 바람직 할 수있는 동시에 실행되는 여러 인스턴스를 방지 할 수 있습니다.

그렇다면이 주장은 무엇을 의미합니까?

나는 예를 수행하려고 :

나는 데이터베이스에 몇 가지 물건을 매우 저 작은 배치 응용 프로그램이 있습니다. 이 응용 프로그램은 주로 main() 메서드로 구성됩니다. 그것은 내가 실행할 .jar 파일에 컴파일 된.

그것은 등이 주() 방법은 동기화 선언 I 동시에이 jar 파일의 두 인스턴스를 실행할 수 없음을 의미? 또는 나는 무엇인가 놓치고 있냐?

+1

*이 jar 파일의 인스턴스 2 개를 동시에 실행할 수 없습니까? *이 작업은 올바르게 수행되지 않습니다. 'jar'를 두 번 실행하면 별도의 JVM이됩니다. 나는 자물쇠 파일 해결책을 갈 것입니다 –

답변

8

아니요, 불가능합니다. 동기화는 동일한 프로그램 실행 내에서만 작동합니다. jar를 두 번 시작하면 두 개의 서로 다른 프로그램 실행이 시작됩니다. 각각의 프로그램 공간은 고유 한 주소 공간을 가지며 어떤 객체 나 메모리도 공유하지 않습니다.

같은 프로그램을 여러 번 실행하지 않으려면 잠금 파일과 같은 외부 잠금을 사용해야합니다.

1

synchronized처럼 뭔가를 시도 할 수 있습니다. 이것은 주로 데이터 무결성을 유지하기 위해 수행됩니다.

동기화 범위가 여러 OS에 걸쳐 있지 않습니다. process. 따라서 main 메소드를 synchronized로 표시하면 원하는 효과를 얻을 수 없습니다.