답변
동기화 방법을 만듭니다.
public synchronized void draw() { System.out.println("draw"); }
public synchronized void foo() { System.out.println("foo"); }
또는 동일한 개체에서 동기화하십시오.
방법에synchronized
퍼팅
private static final Object syncObj = new Object();
public void draw() {
synchronized (syncObj) {
System.out.println("draw");
}
}
public void foo() {
synchronized (syncObj) {
System.out.println("foo");
}
}
왜 syncObj를 정적으로 만들었습니까? 모든 인스턴스에서 메소드 호출을 동기화해야합니다. 그러나 그것은 나쁜 것입니다. 그럼 정적 수정자를 간단히 제거 할 수 있습니까? – user2224350
'static'modifier를 제거하면 각 객체는 다른 syncObject를 가지게됩니다. 원하는 객체에 의존합니다. '정적'은 그 클래스의 모든 인스턴스에 의존하지 않고, 그 클래스의 모든 인스턴스에 의존한다. – Zarathustra
스레드가 그 방법을 입력하기 전에 개체 인스턴스에 대한 잠금을 획득하는 것을 의미하므로이 경우 두 가지 방법이 그들을 같은 잠금 경쟁됩니다 입력 스레드를 동기화 표시된, 하나의 스레드가 잠금을 얻으면 다른 모든 스레드는 동일한 잠금에서 동기화되는 모든 메소드를 종료합니다. 두 가지 방법이 동시에 실행하기 위해서는 그래서 그들은이 같은 다른 잠금을 사용하는 것이다 :
public class IClass {
private final Object lockDraw = new Object();
private final Object lockFoo = new Object();
public void draw() {
synchronized(lockDraw) {
//method draw
}
}
public void foo() {
synchronized(lockFoo) {
//method foo
}
}
}
Both methods lock the same monitor. Therefore, you can't simultaneously execute them on the same object from different threads (one of the two methods will block until the other is finished).
snyc 객체가'정적 '이 아니므로 각 객체는 다른 모니터를 갖게됩니다. – Zarathustra
- 1. 자바 클래스 아래의 것과 같은 두 가지 방법이 있습니다 가정
- 2. 두 가지 방법이 동일합니까?
- 3. 두 가지 방법이 동일합니까?
- 4. 자바 동기화
- 5. Git Flow - 두 가지 미완성 기능 동기화
- 6. 자바 내가 같은 클래스에서 두 가지 방법이 오류
- 7. 자바 스크립트는 두 가지 기능
- 8. 두 회사 GIT 저장소의 두 가지 fragmens 동기화?
- 9. 두 목록보기 동기화 동기화
- 10. 이 두 가지 방법을 결합하는 방법이 있습니까?
- 11. 왜 FirebaseDatabase 클라이언트를위한 두 가지 방법이 오프라인입니까?
- 12. 외래 키를 정의하는 두 가지 방법이 다른가요?
- 13. 나는 두 가지 방법이 있다면 다른 방법
- 14. 버튼의 목록을 작성하고 내가 두 가지 방법이
- 15. 스칼라 스크립트를 시작하는 두 가지 방법이 바람직합니까?
- 16. 나는 서비스에 대한 이러한 두 가지 방법이
- 17. 자바 스크립트에서 두 개의 스크롤바 동기화
- 18. 두 웹보기 동기화
- 19. 두 화면에서 두 가지 렌더링 방법이 동시에 작동합니다.
- 20. 자바 동기화
- 21. 자바 동기화
- 22. 나는 다음과 같은 두 가지 방법이 있다고 상상해 TPL
- 23. 자바 동기화 문제
- 24. 자바 일관 동기화
- 25. Windows 8 메트로 응용 프로그램에서 두 가지 ppl 작업 동기화
- 26. 두 가지 프로젝트에서 AspectJ를 사용하여 jUnit 테스트를 짜는 방법이 있습니까?
- 27. 두 가지 버전을 비교하는 자바 스크립트
- 28. 자바 프로젝트의 두 가지 컴파일 된 버전
- 29. 자바 스크립트에서 두 가지 일을 동시에 수행
- 30. 하나의 자바 스크립트 클래스로 두 가지 효과
대답은 질문의 제목입니다. 그것들을 동기화 시키십시오 :'public synchronized void draw() {...};'(그리고 foo도 마찬가지입니다.) http://docs.oracle.com/javase/tutorial/essential/concurrency/ –
Java에서 헝가리 표기법을 사용하고 있으며 (이는 드문 경우입니다.) 잘못 사용하고 있습니다 (구체적인 클래스를 사용하는 동안 인터페이스를 의미합니다) . –
은 메서드를 동기화하고 draw()에서 객체 스레드가 foo()를 호출하도록합니다. – Alex