线程池1

package interview.pool;

import java.util.ArrayList;

public class ThreadPool
{
	// 线程池的大小
	public static int NUM_THREAD = 3;

	// 线程集合
	private ArrayList<Worker> threads = new ArrayList<Worker>(NUM_THREAD);

	private static final ThreadPool iNSTANCE = new ThreadPool();

	public static ThreadPool getInstance()
	{
		return iNSTANCE;
	}

	/**
	 * 进行初始化工作
	 */
	private ThreadPool()
	{
		for (int i = 0; i < NUM_THREAD; i++)
		{
			Worker worker = new Worker();
			threads.add(worker);
			worker.start();
		}
	}

	/**
	 * 执行任务
	 */
	public synchronized void execute(Task task)
	{
		// 取出一个不忙的线程进行处理
		for (Worker worker : threads)
		{
			if (!worker.isBusy())
			{
				worker.setTask(task);
				worker.setBusy(true);
				return;
			}
		}
		// 都忙的话,则新建一个并添加到池中
		// Worker w = new Worker();
		// w.setTask(task);
		// w.setBusy(true);
		// w.start();
		// this.threads.add(w);
		
		try
		{
			Thread.sleep(1000);
			execute(task);
		}
		catch (InterruptedException e)
		{
			e.printStackTrace();
		}
	}

	/**
	 * 内部类:线程工作者
	 */
	private class Worker extends Thread
	{
		Task task = null;

		private boolean busy = false;

		public boolean isBusy()
		{
			return busy;
		}

		public void setBusy(boolean busy)
		{
			this.busy = busy;
		}

		public Task getTask()
		{
			return task;
		}

		public Worker()
		{

		}

		public void setTask(Task task)
		{
			this.task = task;
		}

		public void run()
		{
			while (true)
			{
				if (task != null)
				{
					try
					{
						task.execute();
					}// 任何情况,都会置为不忙状态
					finally
					{
						busy = false;
						task = null;
					}
				}
			}

		}
	}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值