2014-11-18 2 views
0

나는 이것과 관련된 많은 질문을 읽었지만 확실한 대답을 찾지 못했습니다. 그래서 그 문제에 대한 제 자신의 질문을 게시하기로 결정했습니다.정적 인스턴스가 비동기 적으로 사용됩니까?

싱글 톤 디자인 패턴을 구현하는 많은 웹 응용 프로그램과 웹 서비스를 보았지만 요즘에는 이것이 좋은 아이디어가되어야하는 진정한 이유가 없다고 생각하고 있습니다. wrong)

제 생각에는 아니오, 내 요청은 동일한 인스턴스를 사용하므로 코드가 느려지고 가비지 수집기를 활용할 수 없습니다.

예 : 요청 1 건 MethodInStaticInstance() 2 초가 걸리다고합시다. Request 2 Call MethodInStaticInstance() 메소드 1이 사용 되었기 때문에 호출하기 위해 요청 1이 완료 될 때까지 대기합니다. (내가 틀렸어,이게 내가 어떻게 보는지, 이것이 사실인지 아닌지는 모르겠다.)

정적 인 리소스를 가질 수있는 유일한 방법은 웹 애플리케이션에서 정적 리소스를 사용할 수있는 유일한 방법이라고 생각한다. 비동기 적으로 사용하십시오. 어떻게 생각해?

+0

물론 경쟁 조건 및 기타 문제의 가능성과 비동기 적으로 사용할 수 있습니다. 별도의 스레드로, 물론 –

답변

0

static 인스턴스에는 특별한 것이 없으며 해당 메서드는 호출자와 동일한 스레드에서 실행됩니다.

정적 인스턴스는 호출자가 별도의 스레드에 있지 않으면 "비동기 적으로"사용되지 않습니다.

웹 응용 프로그램의 컨텍스트에서 스레드가 안전하지 않은 경우 유사한 시간에 두 명의 사용자가 동일한 함수를 호출하면 경쟁 조건이 발생할 가능성이 매우 높습니다.

0

통계는 메서드를 실행하기 위해 개체를 인스턴스화하지 않으려는 경우에 유용합니다. sum 정적 인 경우

MyMath m = new MyMath(); 
    int c = m.sum(1, 2); 

그러나 다음을 수행 할 수 및 개체를 만드는 불필요하게 피 :

public class MyMath 
{ 
    public int sum(int a, int b) 
    { 
    return a + b; 
    } 
} 

당신이 다음을 수행해야 할 것 합을 활용하려면 다음 예를 고려

int c = MyMath.sum(1,2); 

이제는 비동기 적으로 사용하는 것과 같습니다. 불가능할 이유는 없습니다. 비 정적 클래스보다 스레드 안전성이 우수합니다 (비 정적 클래스 인 경우 원할 경우 별도의 스레드에 인스턴스을 별도로 사용할 수 있음).

편집 : 싱글

싱글 톤 패턴은 일반적으로 당신이 객체의 하나의 인스턴스가 발생하는지 확인하고자 할 때 사용된다. 그 이유는 다양합니다. 나는 리소스에 대한 연결 수를 제한하기 위해 과거에 이것을 사용했습니다. 이 비동기 적으로 사용할지 여부는 구현에 따라 다릅니다. 한 메소드의 여러 호출이 동시에 실행되는 것을 방지하기 위해 잠금을 구현할 수는 있지만이를 구체적으로 수행해야합니다.

관련 문제