2017-04-26 4 views
0

인스턴스 메소드와 정적 메소드가 하나 인 클래스가 하나 있다고 가정합니다. 우리는 클래스 레벨 잠금 &과 정적 메소드의 블록을 동기화했습니다. 객체 레벨 잠금을 사용하여 인스턴스 메소드에서 블록을 동기화했습니다. 한 스레드가 정적 메서드 실행을 시작하고 클래스 수준의 잠금을 설정하면 동시에 다른 스레드가 인스턴스 메서드를 실행하려고합니다. 그러면 두 번째 스레드가 인스턴스 메서드 실행에서 차단됩니까 ??정적 메서드에 대한 클래스 수준의 잠금을 설정하면 하나의 스레드가 실행되면 다른 클래스가 같은 클래스의 다른 인스턴스 메서드를 실행하는 다른 스레드를 차단합니까?

+0

이 하나의 잠금 객체, 두 잠금 오브젝트가 다시 입력 할 수 있습니다 또는 어떻게 잠겨 있는지. [최소한의 완전하고 검증 가능한 예제를 만드는 방법] (http://stackoverflow.com/help/mcve)을 읽고 코드 예제를 보여주십시오. –

답변

1

두 번째 스레드는 blocked.the 클래스 수준 잠금 &이 클래스 개체 수준의 잠금되지 않습니다, 두 개의 잠금 장치는 다른,하지만 그들은 서로

0

static synchronizednon static synchronized 메서드는 simultaneously 또는 concurrently을 다른 개체에서 잠글 수 있기 때문에이 메서드를 실행할 수 있습니다.

+0

두 가지 다른 정적 개체에 대한 잠금을 동시에 두 정적이 아닌 동기화 된 메서드를 동시에 실행할 수 있습니다. 정적 동기화 란 클래스 수준 (예 : 동기화 된 (A.class) .so)에서 잠겨 있음을 의미합니다. 그래서 다른 스레드도 인스턴스 메서드를 실행할 수 없습니다 ?? –