java threadpool

Java线程池

Executors Pool

Thread Pool

主线程等待所有子线程执行完成后主线程再执行

CountDownLatch Down

JDK1.8

package com.scd.thread;

public class MyTask implements Runnable {

	private int taskNum;
		public MyTask(int num) {
			this.taskNum = num;
		}
		@SuppressWarnings("static-access")
		@Override
		public void run() {
			System.out.println("正在执行task "+taskNum);
			try {
				Thread.currentThread().sleep(4000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			FixedThreadPoolTest.latch.countDown();
			System.out.println("task "+taskNum+"执行完毕");
		}
}

package com.scd.thread;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class FixedThreadPoolTest {
	
	public static CountDownLatch latch;
	
	public static void main(String[] args) throws Exception{
		long starttime =System.currentTimeMillis();
		latch = new CountDownLatch(10);
		ExecutorService singleThreadExecutor = Executors.newFixedThreadPool(10);
		for(int i = 0; i < 10; i++){
			singleThreadExecutor.execute(new MyTask(i));  
		}
		latch.await();
		singleThreadExecutor.shutdown();
		System.out.println("多线程消耗时间:"+(System.currentTimeMillis() - starttime));
	}

}

CountDownLatch初始值与MyTak(数量保持一致

线程同步访问

Java多线程的同步机制(synchronized)