단일 디자인 모델에서 게으름뱅이 라인의 안전 문제를 완벽하게 해결하다
public class SingleDemo {
private static SingleDemo s = null;
private SingleDemo(){}
public static SingleDemo getInstance(){
if(s == null){
s = new SingleDemo();
}
return s;
}
}
테스트 클래스 쓰기:
public class ThreadDemo3 {
public static void main(String[] args) {
SingleDemo s1 = SingleDemo.getInstance();
SingleDemo s2 = SingleDemo.getInstance();
System.out.println(s2 == s2);
}
}
실행 결과는 줄곧true입니다. 단선 아래에는 문제가 없다는 것을 설명합니다. 다음은 다중 라인을 써서 단례에 접근합니다.
public class ThreadTest implements Runnable {
// , Set
public Set<SingleDemo> singles = new HashSet<SingleDemo>();
@Override
public void run() {
//
SingleDemo s = SingleDemo.getInstance();
//
singles.add(s);
}
}
다중 스레드 동시 액세스 예제 사용:
public class ThreadDemo3 {
public static void main(String[] args) {
// SingleDemo s1 = SingleDemo.getInstance();
// SingleDemo s2 = SingleDemo.getInstance();
// System.out.println(s2 == s2);
ThreadTest t = new ThreadTest();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
System.out.println(t.singles);
}
}
실행 결과는 다음과 같습니다.[com.persagy.thread.SingleDemo@1bc4459, com.persagy.thread.SingleDemo@150bd4d]
또는
[com.persagy.thread.SingleDemo@12b6651]
라인이 있고 접근 안전 문제가 있다는 것을 설명하는데, 얻은 것이 반드시 같은 실례는 아니다
어떻게 스레드 안전 문제를 해결합니까?
동기화 잠금 메커니즘을 썼죠.
다음 개선 사례:
public class SingleDemo {
private static SingleDemo s = null;
private SingleDemo(){}
public static synchronized SingleDemo getInstance(){
if(s == null){
s = new SingleDemo();
}
return s;
}
}
동기화 함수를 넣은 후 스레드 안전 문제가 해결되었다여러 번 실행하면 같은 실례를 가져옵니다. 두 실례가 나타나지 않습니다.
[com.persagy.thread.SingleDemo@12b6651]
그러나 다중 스레드가 병렬 방문하는 상황에서 모든 스레드가 실례를 얻을 때마다 자물쇠를 판단하고 효율이 비교적 낮다. 효율을 높이기 위해 나는 이중 판단 방법을 추가하여 효율 문제를 해결했다.
코드는 다음과 같습니다.
public class SingleDemo {
private static SingleDemo s = null;
private SingleDemo(){}
public static SingleDemo getInstance(){
/* ,
* */
if(s == null){
// ,
synchronized(SingleDemo.class){
if(s == null){
s = new SingleDemo();
}
}
}
return s;
}
}
이런 방식으로 게으름뱅이식의 스레드 안전 문제를 해결하고 효율을 높였지만 실제 개발에서 게으름뱅이식을 사용하는 것이 비교적 많다. 왜냐하면 이 코드는 비교적 많고 번거롭기 때문이다.이상은 바로 여러분이 가져온 완벽한 해결 사례 디자인 모델에서 게으름뱅이 라인의 안전 문제의 모든 내용입니다. 많은 응원 부탁드립니다~
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JAVASE 단일 설계 모델에 대한 간단한 설명간단하게 말하면 디자인 모델은 사실 문제에 대한 효과적인 해결 방식이다.사실 그것은 일종의 사상이다. 1. 단례 디자인 모델. 해결 문제: 메모리에 있는 대상의 유일성을 보증할 수 있다.(단일 인스턴스) 단일 디자인...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.