동시 디버깅

동시 디버깅 도구, 용기!

참고 :

Tomcat7의 최적화 성능, 동시성 -NIO 모드 개선

문제를 멀티 스레딩 싱글 철저하게 면접 봄의 요구 알 수

팁 내부에 단일 및 다중 스레드에 대한 자세한 이해는 + A + 면접 질문

휘발성 키워드

  • 휘발성 키워드 효과 (변수의 가시성이 금지 재정렬)을 보장 할 수 없습니다 자성

  • 사용 시나리오
    • 일반적으로 수정 된 상태 (부울 및 INT)
    • 간단한 과제

동기화 메커니즘

  • 모니터 잠금 (동기화)

    비관적 잠금

  • 디스플레이 잠금 (ReentrantLock와,하는 ReadWriteLock)

    또한 고정 될 수있다 이러한 인터럽트에 응답하여 제공되고, 로크 요청은 폴링 타이밍 로크 않도록 데드 멀티 스레드 수있다

  • 원자 변수 (AtomicInteger, AtomicLong, AtomicBoolean)

    낙관적 잠금, CAS (비교 언급 변경)

  • 휘발성 물질

  • 폐쇄 스레드 (아날로그 단일 스레드, 멀티 스레드 환경 회피)

    데이터를 공유하지 마십시오

    • 스택 폐쇄
    • ThreadLocal를

시작 건

CountDownLatch를 (스레드 카운터)

static CountDownLatch cdl = new CountDownLatch(20);
...
    cdl.countDown();  // 此处要调用20次
...
cdl.await(); // 阻塞,countDown计数20次后才统一走下一步程序
// 类似发令枪,统一起跑

기본 IO 모델과 Tomcat8 차이 Tomcat7

바이오 tomcat7 기본, 요청에 해당하는 스레드가 차단

NIO 기본 tomcat8, 스레드는 블로킹, 여러 요청을 처리 할 수 ​​있습니다

  • 시작 NIO 모드

    NIO에 tomcat7 수정

    <Connector port="8080"protocol="org.apache.coyote.http11.Http11NioProtocol"
    
            connectionTimeout="20000" redirectPort="8443"/>
  • 스레드 풀

    성능을 개선하기 위해 스레드 풀을 사용할 수 있도록 톰캣은 각 사용자 요청이 스레드 바람둥이에, 기본 스레드 풀에서 사용할 수 없습니다. 사실, 여기에 수신 작업자 스레드로 스레드 풀 작업에 다음 특정 시간에, 스레드 풀에 예약 및 파견 스레드를 스레드하고있다

    아래의 정보 및 지정 액츄에이터 커넥터의 릴리스 프로필

    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
            maxThreads="150" minSpareThreads="4"/>
    
    <!-- executor="tomcatThreadPool"为上面的执行器 -->
    <Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />

싱글 멀티 스레딩 봄 지원

왜 지역 변수는 멀티 스레드의 영향에 의해 영향을받지 않습니다?

  1. 그 싱글 톤 클래스를 실행할 경우, 서블릿 웹 응용 프로그램을 다중 스레드 등, 지역 변수의 동작을 각각의 방법은 자신의 메모리 영역의 스레드에서 수행, 그것은 스레드 안전

  2. 지역 변수는 영향 멀티 스레딩의 영향을받지 않습니다

  3. 그것은 멀티 스레드 멤버 변수의 영향이있을 것

  4. 작동 부재 변수는 ThreadLocal를 스레드 안전을 보장 할 수 있습니다 들어

    빈 객체의 멤버 변수를 정의의 ThreadLocal 부재 변수의 변수 요구 ThreadLocal을 저장

추천

출처www.cnblogs.com/jarvankuo/p/11954916.html