아래 표시된 코드를 사용하면 IntelliJ IDEA가 DecibelSample
코드에서 "expression expected"를 말합니다. 그게 무슨 뜻입니까, 어떻게 고칠 수 있습니까?synchronized 블록 : "expression expected"
답변
DecibelSample
이 클래스라고 가정하면이 코드는 유효한 Java 코드가 아닙니다.
은 컴파일 오류를 제거하기 위해이 같은 코드를 수정 synchronized
이에 대한 고정 몇 가지 예를 필요로하기 때문에
synchronized (DecibelSample.class) {}
귀하의 코드가 작동하지 않습니다. 위의 수정 된 예제에서는 Class
인스턴스를 사용합니다.
synchronized (this) {}
으로 변경할 수도 있습니다.이 경우 메소드가있는 클래스의 인스턴스가 잠금으로 사용됩니다.
private static final Object LOCK = new Object();
...
public void foo() {
synchronized(LOCK) {}
}
이 아마 가장 좋은 방법이 될 것입니다, 현재 인스턴스 또는 클래스 인스턴스에 대해 몇 가지 단점이있다 잠금 이후 :
세 번째 옵션은 다음과 같이 예를 들어, 잠금 장치로 사용할 임의의 객체를 정의하는 것입니다. 자세한 내용은 SO answer을 참조하십시오.
synchronized
에 대한 자세한 내용은 Java Language Specification에서 확인할 수 있습니다.
synchronized
키워드에는 개체가 필요합니다. DecibelSample
은 Object가 아닌 클래스 이름입니다.
객체는 동기화를 보장하기 위해 사용됩니다. 즉, 스레드가 동기화 된 블록 내부에서 코드를 실행해야하는 경우 : 스레드가 객체에 대한 잠금을 획득해야합니다. 락이 스레드 의해 취득되어 수 있다면
이어서 블록 내부 코드가 실행되고, 또 다른 스레드를 획득 할 수 있도록 잠금이 해제된다.
잠금을 얻을 수없는 경우 : 잠금 (다른 스레드 소유)이 해제 될 때까지 스레드 대기가 해제됩니다.
: 귀하의 경우//used for locking only // don't consume useless memory : a zero-sized array is fine // ensure that the LOCK is shared between all threads : let's make it static // ensure that the object used for locking cannot be changed by anyone : let's make it final // at first sight : we don't need to synchronize on this Object in another class : keep it private. private static final Object[] LOCK = new Object[0]; ... if (mDecibelSample == null) { synchronized (LOCK) { if (mDecibelSample == null) { mDecibelSample = new DecibelSample(); } } }
, 당신은 잠금 장치를 지원하는 객체가 필요
- 1. Json 객체의 사전 "Expected expression"
- 2. VBA : Suppress "Expected : expression"Msgbox
- 3. NSMutableArray 컬렉션 및 @Synchronized 블록
- 4. 중첩 템플릿 : "before primary-expression expected ')" "
- 5. nand 2 tetris ASM "Expression Expected"
- 6. 내부에서 돌아 오면 목표 -c의 @synchronized 블록
- 7. Visual Basic에서 두 개의 "expression expected"오류가 발생했습니다.
- 8. C 프로그램에서 "char before expected expression"오류가 무엇입니까?
- 9. 다음과 같은 컴파일 오류 : switch, "before expected expression"
- 10. synchronized 키워드는 예외가 있습니까?
- 11. @synchronized 대 lock/unlock
- 12. 블록에서 @synchronized (self)가주기를 유지합니까?
- 13. TemplateSyntaxError 유효하지 않은 블록 태그 : 'else', expected 'endif'
- 14. C++ 구문 오류 "expected";
- 15. before expected textString
- 16. java.lang.AssertionError : expected
- 17. Error : ')'expected
- 18. 블록 내의 블록 동기화?
- 19. 자바 스레드 : synchronized blocks
- 20. @synchronized() 및 NSLock 차이점
- 21. synchronized 키워드의 용도는 무엇입니까?
- 22. Java Thread Synchronized
- 23. synchronized (Object) {} 문제
- 24. synchronized 메서드가 인터페이스
- 25. @synchronized Objective-C
- 26. java static synchronized method
- 27. Java 스레드 "synchronized"
- 28. @synchronized 섹션에서 선언 된 블록이 동기화됩니까?
- 29. 암 어셈블리 if (expression && expression)
- 30. 동기화 된 블록 내부의 동기화 된 블록