码迷,mamicode.com
首页 > 编程语言 > 详细

一个线程执行多个任务,按照顺序执行

时间:2020-07-19 15:59:06      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:消费   lock   main   创建对象   class   --   ring   个人   thread   

一个线程执行多个任务,要按照顺序执行,怎么去实现?

分析:

多个人任务-->线程
要按照顺序执行--》就需要排队,那就是队列
一个给任务,一个执行任务--》涉及一个生产一个消费
过渡:需要容器装任务来存储任务
有两个线程,一放一取不是原子操作,所以涉及线程安全问题

代码实现:

import java.util.concurrent.ArrayBlockingQueue;
public class TestIOBlocking {
	static int m=0;
	//主线程
	public static void main(String[] args) {
		System.out.println("开始!");
		//生产任务的
		TestExecutor t=new TestExecutor();
		for(int i=0;i<20;i++) {
			t.execute(new Runnable() {
				@Override
				public void run() {
					System.out.println("test"+TestIOBlocking.m++);
				}
			});	
		}
		
	} 
}
class TestExecutor{
	public TestExecutor() {
		//创建对象就执行
		thread.start();
	}
	private static workThread thread=new workThread();
	//存储任务的容器,先设定存3个任务,这是一个阻塞的队列
	private static ArrayBlockingQueue<Runnable> queue=new ArrayBlockingQueue<Runnable>(3);
	
	//工作线程
	static class workThread extends Thread{
		@Override
		public void run() {
				//执行的任务,反复的取
			while(TestIOBlocking.m<=19) {
				try {
					Runnable r=queue.take();//阻塞方法
					r.run();
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
	//取任务的方法
	public void execute(Runnable r) {
		try {
			queue.put(r);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}

扩展:

  1. 怎么实现一个阻塞式对列结构?
  2. 怎么实现一个LruCache缓存结构(不依托于LikedList,HashMap来实现)?
    (lru:最近最少算法)

一个线程执行多个任务,按照顺序执行

标签:消费   lock   main   创建对象   class   --   ring   个人   thread   

原文地址:https://www.cnblogs.com/perryQiu/p/13339249.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!