`
小白杨的记忆
  • 浏览: 15817 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

线程与线程池

 
阅读更多

线程

   线程的一些主要状态以及状态之间的装换 (如下图)

           

       主要状态为1.新建 2.就绪 3.运行4阻塞 5.死亡

        其中:join()可以用来邀请其他线程先执行

                    yield()告诉系统"把自己的CPU时间让掉,让其他线程或者自己运行"


       引入线程的好处:

       1 创建一个线程花费的时间少
2 两个线程(在同一进程中的)的切换时间少。
3 由于同一个进程内的线程共享内存文件,所以线程之间互相通信不必调用内核
4 线程能独立执行,能充分利用和发挥处理机与外围设备并行工作的能力

 

 

线程池

        当线程的执行时间远大于创建时间和销毁时间之和时,采用线程池不仅调整和缩短创建线程,销毁线程的时间,而且它还显著减少了创建线程的数目。

      一般一个简单线程池至少包含下列组成部分。

       1. 线程池管理器(ThreadPoolManager):用于创建并管理线程池

       2.工作线程(WorkThread): 线程池中线程

       3. 任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行。

       4.任务队列:用于存放没有处理的任务。提供一种缓冲机制。

如下例:

···自定义线程池类

 

···创建线程池管理器

//构造函数(自定义线程池)
	public ThreadPool(int count){
		this.count=count;
		threadPool=new ThreadWork[this.count];
		for(int i=0;i<this.count ;i++){
			ThreadWork work=new ThreadWork();//创建一个工作线程
			threadPool[i]=work;
			threadPool[i].setName("创建第"+i+"号线程");
			threadPool[i].start();
			System.out.println("第"+i+"号线程开始运行");
		}	
	}

   //添加新任务

	//执行任务的方法
	public void excute(Runnable task){
		synchronized(task_list){
			//添加任务到等待队列中
			task_list.addLast(task);
			//通知
			task_list.notify();
		}	
	}

 

创建工作线程

	//工作线程
	private class ThreadWork extends Thread{
		public void run(){
			Runnable r;
			while(true){
				synchronized(task_list){
					if(task_list.isEmpty()){//队列为空时,等待
						try {
							task_list.wait();
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
					}
					//没执行完一次任务之后将该任务从等待就绪队列中删除
					r=task_list.removeFirst();
				}
				r.run();//执行删除的操作
			}		
		}
	}

 

 

创建任务接口

package threadPool;
//自定义任务类
public class Task implements Runnable{
	public void run() {
		//输出当前正在执行的线程的名字
		System.out.println(Thread.currentThread().getName()+"正在运行");
		try {
			Thread.sleep(2000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

 

 

创建任务队列

//保存等待任务的队列
private LinkedList<Runnable> task_list=new LinkedList<Runnable>();

 

  • 大小: 74.1 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics