java并行执行多个任务

java并行执行多个任务:

最近做项目中,有个任务需要实现并发编程,个人参考了下网上的实现,自己实现了下并发方法,并且增加了简单的说明,希望的有需要的朋友有些帮助。


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

/**
 * 测试监控类
 * 
 * @author
 * 
 */
public class WatchThread {
	
	private String name = UUID.randomUUID().toString();

	/**
	 * 测试函数
	 * 
	 * @throws InterruptedException
	 */
	public void testThread() throws InterruptedException {
		int threadNum = 10;
		// 初始化countDown
		CountDownLatch threadSignal = new CountDownLatch(threadNum);
		// 创建固定长度的线程池
//		Executor executor = Executors.newFixedThreadPool(threadNum);
		//此处不可以用接口 需要使用Executor的实现类 ExecutorService  Executor未提供shutdown等方法
		ExecutorService executor = Executors.newFixedThreadPool(threadNum);
		for (int i = 0; i < threadNum; i++) { // 开threadNum个线程
			Runnable task = new TestThread(threadSignal);
			// 执行
			executor.execute(task);
			
		}
		threadSignal.await(); // 等待所有子线程执行完
		//固定线程池执行完成后 将释放掉资源 退出主进程
		executor.shutdown();//并不是终止线程的运行,而是禁止在这个Executor中添加新的任务
		// do work end
		//退出主进程
		System.out.println(Thread.currentThread().getName() + "+++++++结束.");
	}

	/**
	 * 测试函数
	 */
	public static void main(String[] args) throws InterruptedException {
		WatchThread test = new WatchThread();
		test.testThread();
	}

	/**
	 * 
	 * @author wangmuming
	 * 此可以做完内部类 也可以不做未内部类
	 * 作为内部类的时候 有一个好处 就是可以直接引用给类的主对象的成员变量 如此处的name
	 * 当然
	 */
	private class TestThread implements Runnable {
		private CountDownLatch threadsSignal;

		public TestThread(CountDownLatch threadsSignal) {
			this.threadsSignal = threadsSignal;
		}
		

		public void run() {
			System.out.println(Thread.currentThread().getName() + "开始..." + name);
			System.out.println("开始了线程::::" + threadsSignal.getCount());
			
			// do shomething
		
			//核心处理逻辑
			
		//	用到成员变量name作为参数
			
			// 线程结束时计数器减1
			threadsSignal.countDown();//必须等核心处理逻辑处理完成后才可以减1
			System.out.println(Thread.currentThread().getName() + "结束. 还有"
					+ threadsSignal.getCount() + " 个线程");
		}
	}

}

 
  

 
  

执行结果:


pool-1-thread-1开始...aaa917dc-bd69-4438-9bb1-0051e5c62984
开始了线程::::10
pool-1-thread-1结束. 还有9 个线程
pool-1-thread-2开始...aaa917dc-bd69-4438-9bb1-0051e5c62984
开始了线程::::9
pool-1-thread-2结束. 还有8 个线程
pool-1-thread-3开始...aaa917dc-bd69-4438-9bb1-0051e5c62984
开始了线程::::8
pool-1-thread-3结束. 还有7 个线程
pool-1-thread-4开始...aaa917dc-bd69-4438-9bb1-0051e5c62984
pool-1-thread-5开始...aaa917dc-bd69-4438-9bb1-0051e5c62984
开始了线程::::7
开始了线程::::7
pool-1-thread-4结束. 还有6 个线程
pool-1-thread-5结束. 还有5 个线程
pool-1-thread-10开始...aaa917dc-bd69-4438-9bb1-0051e5c62984
开始了线程::::5
pool-1-thread-6开始...aaa917dc-bd69-4438-9bb1-0051e5c62984
pool-1-thread-9开始...aaa917dc-bd69-4438-9bb1-0051e5c62984
开始了线程::::4
pool-1-thread-9结束. 还有3 个线程
pool-1-thread-8开始...aaa917dc-bd69-4438-9bb1-0051e5c62984
开始了线程::::3
pool-1-thread-8结束. 还有2 个线程
pool-1-thread-7开始...aaa917dc-bd69-4438-9bb1-0051e5c62984
开始了线程::::2
pool-1-thread-7结束. 还有1 个线程
开始了线程::::4
pool-1-thread-10结束. 还有4 个线程
pool-1-thread-6结束. 还有0 个线程
main+++++++结束.

你可能感兴趣的:(JAVA,java并发编程)