一个线程执行多个任务,按照顺序执行
一个线程执行多个任务,要按照顺序执行,怎么去实现?
分析:
多个人任务-->线程
要按照顺序执行--》就需要排队,那就是队列
一个给任务,一个执行任务--》涉及一个生产一个消费
过渡:需要容器装任务来存储任务
有两个线程,一放一取不是原子操作,所以涉及线程安全问题
代码实现:
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();
}
}
}
扩展:
- 怎么实现一个阻塞式对列结构?
- 怎么实现一个LruCache缓存结构(不依托于LikedList,HashMap来实现)?
(lru:最近最少算法)
一个线程执行多个任务,按照顺序执行
原文地址:https://www.cnblogs.com/perryQiu/p/13339249.html