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

2021-06-19 00:00:00 多个 执行 线程

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

import java.util.concurrent.ArrayBlockingQueue;

/** * 一个线程执行多个任务,要按照顺序执行,怎么去实现? * 分析: * 多个人任务-->线程 * 要按照顺序执行--》就需要排队,那就是队列 * 一个给任务,一个执行任务--》涉及一个生产一个消费 * 过渡:需要容器装任务来存储任务 * 有两个线程,一放一取不是原子操作,所以涉及线程安全问题 * @author qfl * 扩展: * 1)怎么实现一个阻塞式对列结构? * 2)怎么实现一个LruCache缓存结构(不依托于LikedList,HashMap来实现)? * lru:最近最少算法 * * 扩展问题: * */
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();
        }
    }
}
    原文作者:枫_林
    原文地址: https://blog.csdn.net/m0_37835884/article/details/78586744
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。

相关文章