2.2.2 synchronized 동기화 코드 블록의 사용

2029 단어
두 개의 병렬 루틴이 같은 대상object의synchronized(this) 동기화 코드 블록에 접근할 때 일정 시간 동안 한 개의 루틴만 실행되고 다른 루틴은 현재 루틴이 이 코드 블록을 실행한 후에야 이 코드 블록을 실행할 수 있습니다.
/**
 * synchronized       
 * @author wuyoushan
 * @date 2017/1/23.
 */
public class ObjectService {
    public void serviceMethod(){
        try {
            synchronized (this){
                System.out.println("begin Time="+System.currentTimeMillis());
                Thread.sleep(2000);
                System.out.println("end end="+System.currentTimeMillis());
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

/**ThreadA   
 * synchronized       
 * @author wuyoushan
 * @date 2017/1/23.
 */
public class ThreadA extends Thread{
    private ObjectService service;

    public ThreadA(ObjectService service) {
        this.service = service;
    }

    @Override
    public void run() {
        super.run();
        service.serviceMethod();
    }
}

/**
 * ThreadA   
 * synchronized       
 * @author wuyoushan
 * @date 2017/1/23.
 */
public class ThreadB extends Thread{
    private ObjectService service;

    public ThreadB(ObjectService service) {
        this.service = service;
    }

    @Override
    public void run() {
        super.run();
        service.serviceMethod();
    }
}

/**
 *     
 * synchronized       
 * @author wuyoushan
 * @date 2017/1/23.
 */
public class Run {
    public static void main(String[] args) {
        ObjectService service=new ObjectService();
        ThreadA a=new ThreadA(service);
        a.setName("a");
        a.start();
        ThreadB b=new ThreadB(service);
        b.setName("b");
        b.start();
    }
}

프로그램 실행 결과는 다음과 같습니다.
begin Time=1492042714510
end end=1492042716511
begin Time=1492042716511
end end=1492042718511

위의 실험은synchronized 동기화 코드 블록을 사용했지만 실행 효율이 향상되지 않았고 실행 효과는 동기화 실행되었다.어떻게synchronized 동기화 코드로 프로그램의 실행 효율이 낮은 문제를 해결합니까?
자바 다중 루틴 핵심 프로그래밍 기술 -2.2.2에서 발췌

좋은 웹페이지 즐겨찾기