2010-01-06 3 views
0

나는 880 개의 스레드가 동시에 synchronized() { method() }을 수행하는 성능 문제를 겪었으며 이로 인해 주요 성능 문제가 발생합니다.synchronized (Object) {} 문제

synchronized()에서 대기중인 스레드 수에 제한이 있습니까? 한도는 어디서 얻을 수 있습니까?

또 다른 질문은 synchronized(?)에 넣는 것이 가장 좋습니다. 그 변수에 액세스하는 다른 클래스가 있기 때문에 synchronized(this)을 넣을 수 없습니다.

+2

귀하의 상황을 더 잘 설명 할 수 있습니까? 잘못된 데이터 구조를 사용 중일 수 있습니다. – notnoop

+1

880 스레드?! 성능 문제가 있다는 것은 놀라운 일이 아닙니다. 소수의 스레드로 문제를 해결하고 대신 비동기 작업을 사용할 수 있습니까? –

+0

"주요 성능 문제"란 무엇입니까? 879 교착 상태의 스레드? –

답변

2

고급 동시성 구조의 경우 동기화를 사용하여 제한하는 방법이 없습니다. http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/package-summary.html이 필요합니다.

동기화 할 내용 (?)은 잠금 상태를 의미하며 달성하려는 잠금 동작에 따라 달라집니다. 모든 다른 클래스에서 액세스 할 수있는 전역 클래스 (예 : public static Object LOCK = new Object();)를 가지고 동기화 한 경우 모든 클래스가 해당 클래스에서 잠글 것입니다.

java tutorial on synchronization을 살펴보십시오.