기록 할 때 멀티 - 스레드 등 다른 메인 스레드 실행 최종 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