전용 기본 함수 Thread.activeCount ()를 수행 인쇄는 2

기록 할 때 멀티 - 스레드 등 다른 메인 스레드 실행 최종 INC 종료 후의 출력값 (다른 스레드 디지털 INC + 1로서 기능) 원한다.

그래서주기를 썼다 :

그동안 (Thread.activeCount ()> 1). {
       에서 System.out.println (Thread.activeCount ());
            Thread.yield ()에,
        }
에서 System.out.println (test.inc)
무한 루프 결과

따라서, 메인은 코드에서 작성했습니다 :

에서 System.out.println (Thread.activeCount ()); //이 개 결과
다음과 같은 이유로 :

// 자바 스레드 관리 MXBean의 위젯
        ThreadMXBean의 tmxb = ManagementFactory.getThreadMXBean을 ();
        // 전용 스레드와 스레드 스택 정보 동기화 모니터 및 동기 정보, 액세스를 획득 할 필요없이
        , []는 ThreadInfo는 threadInfos의 =의 tmxb.dumpAllThreads (거짓 , 거짓);
        // 이송 스레드 정보의 ID 및 이름 출력한다
        합니다 (ThreadInfo에 정보 : threadInfos)에 대한 {
            ]에서 System.out.println를 ( "["+ info.getThreadId () + "]"+ info.getThreadName ())
        }
[. 6] 에서 Ctrl-브레이크 모니터
리스너가 부착 [5.]
신호 디스패처 [4.]
종결 자 [3.]
[2] 핸들러 참조
[1.] 주
에서 System.out.println (Thread.activeCount ())
.는 Thread.currentThread ()의 getThreadGroup (). 목록 ();
2
java.lang.ThreadGroup의 [NAME = 주, MaxPri = 10]
    [5, 메인 주] 스레드
    스레드 [메인 모니터 Ctrl 키 브레이크, 5,]
현재 스레드 그룹에서 찾을 수 있습니다에는 다음이 포함됩니다 주와 Ctrl 키 브레이크 모니터

다음과 같이 모든 멀티 스레드 테스트 코드는 다음과 같습니다

수입 com.google.common.util.concurrent.ThreadFactoryBuilder;

java.util.concurrent의를 가져옵니다. *;
수입 java.util.concurrent.atomic.AtomicInteger;

/ **
 일종의 원자 조작에서 사용할 * java.util.concurrent.atomic의 패키지, 즉 기본 데이터 타입이 동작은 원자 동작이되도록 봉입
 비교 (CAS 원자는 원자의 동작을 이용하여 달성 * 및 스왑) 실제로 프로세서 구현에 의해 제공 CMPXCHG 명령하여 CAS
 * CMPXCHG 명령 및 프로세서 원자 작업을 수행
 *
 * @author 잭
 * @Create 2018년 5월 4일 12시 12분
 ** /
공용 클래스 TestAtomicMain {

    개인 정적 최종 INT의 THREAD_COUNT = 10;

    개인 정적 최종 INT의 FOR_COUNT = 10;

    개인 정적 최종 INT의 THREAD_ACTIVE_COUNT = 2;

    공개 AtomicInteger의 증분 = 새로운 AtomicInteger ();

    공공 무효 증가 () {
        inc.getAndIncrement ();
    }

    공공 정적 무효 메인 (문자열 []에 args) {

        최종 TestAtomicMain 시험 = 새로운 TestAtomicMain ();
        ThreadFactoryBuilder threadFactoryBuilder = 새로운 ThreadFactoryBuilder ();
        . ThreadFactory를 namedThreadFactory = threadFactoryBuilder.setNameFormat ( "ThreadFactory- %의 D") 구축 ();
        singleThreadPool = ExecutorService를 사용해, 새로운 ThreadPoolExecutor (THREAD_COUNT, THREAD_COUNT * 2
                0L, TimeUnit.MILLISECONDS 새로운 LinkedBlockingQueue를 <> (1024),
                namedThreadFactory 새로운 ThreadPoolExecutor.AbortPolicy ());
        대해 INT (I = 0; I <THREAD_COUNT은, 내가 ++) {
            singleThreadPool.execute (() -> {
                대 (INT의 J = 0; J <FOR_COUNT, J ++) {
                    test.increase ();
                }
            })
        }
        SingleThreadPool.shutdown ();
        그동안 (Thread.activeCount ()> THREAD_ACTIVE_COUNT) {
            에서 System.out.println (이하 "기타 활성 스레드 번호"+ Thread.activeCount ())
            ; Thread.yield ()에
        }
        시스템 .out.println (test.inc);
    }
}
또 활성 스레드 번호 9 개
갖는 다른 활성 스레드 3 개
다른 활성 스레드 3 갖는
100
원하는 효과를 달성


원본 : HTTPS : //blog.csdn.net/ke_g3/article/details/80199209
 

추천

출처blog.csdn.net/weixin_44018338/article/details/91989252