Multi-Thread 3---Use thread Pool

本文介绍了如何在Java中使用线程池,展示了经典实例,并讲解了如何在特定时间启动线程。
摘要由CSDN通过智能技术生成

1. Classic example to use Thread pool

public class ThreadPoolOne {

	public static void main(String[] args) {
		// use a static Executors class create a fixed size thread pool
		ExecutorService threadPool = Executors.newFixedThreadPool(3);
		
		for (int i=0;i<10;i++){  //this way we give 10 tasks to a 3 running threads to do.
			Runnable task = new Runnable(){
				@Override
				public void run() {
					int i = new Random().nextInt();
					System.out.println(Thread.currentThread().getName()+"   is running id is "+ i);
				}
		
			};
			//create 10 runnable for 10 thread 
			threadPool.execute(task);
		
		}
		//at last,we should shutdown thread pool
		threadPool.shutdown();
	}

}

Executors is a static class, we can use it to create a threadPool, and use the execute() passed by a runnable to start the thread, this doesn't have the return value of the thread. If we want to get the return value of the running thread, we can use the threadPool.submit() method.  This example, the thread pool arrange the execution of it's threads. we don't have much to do about when will a thread start, and the frequence of a thread.

2. start a thread at a particular time

if we want to start a thread at a paticular time or at a frequence. we can use the ScheduledExecutorService class

public class ThreadPoolScheduledThread {

	public static void main(String[] args) {
		final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(5);//the pool size is 5
		//create a runnable task
		Runnable task = new Runnable(){
			@Override
			public void run() {
				int i = new Random().nextInt();
				System.out.println(Thread.currentThread().getName()+"   is running id is "+ i);
			}
	
		};
		
		//execute after 2 seconds, and will execute every 3 seconds
		final ScheduledFuture future1 = scheduler.scheduleAtFixedRate(task, 2, 3, TimeUnit.SECONDS);
		
		//example 2: execute after 1 minute, and will execute every 5 minute
		final ScheduledFuture future2 = scheduler.scheduleAtFixedRate(task, 1, 5, TimeUnit.MINUTES);
		
		//do a work after a period of time
		//same way for do a work at a particular time(use that time - the current time)
		Runnable taskFinish = new Runnable(){
			@Override
			public void run() {
				future1.cancel(true);//ture means if the thread is running, we still want cancel it.
				future2.cancel(true);
				scheduler.shutdown();
			}
	
		};
		//execute a task after 30 seconds
		scheduler.schedule(taskFinish, 30, TimeUnit.SECONDS);
	}

}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值