首页 > 其他分享 >ScheduledThreadPoolExecutor模仿学习

ScheduledThreadPoolExecutor模仿学习

时间:2023-06-15 14:55:21浏览次数:46  
标签:return RunnableScheduledFuture CBlockingQueue ScheduledThreadPoolExecutor class 

 

public interface CBlockingQueue<E> {
    boolean add(E e);
    E take();
}

 

import java.util.concurrent.Delayed;
import java.util.concurrent.FutureTask;
import java.util.concurrent.RunnableScheduledFuture;
import java.util.concurrent.TimeUnit;

public class CScheduledThreadPoolExecutor extends CThreadPoolExecutor {

    public CScheduledThreadPoolExecutor() {
        super(new CDelayedWorkQueue());
    }

    public void test(Runnable r, String result) {
        CScheduledFutureTask<String> sft = new CScheduledThreadPoolExecutor.CScheduledFutureTask<>(r, result);
        super.getQueue().add(sft);
        ensurePrestart();
    }

    // 语法错误 static class CDelayedWorkQueue<Runnable> implements CBlockingQueue<Runnable> {
    static class CDelayedWorkQueue implements CBlockingQueue<Runnable> {

        private RunnableScheduledFuture<?>[] queue = new RunnableScheduledFuture<?>[5];

        @Override
        public boolean add(Runnable r) {
            RunnableScheduledFuture<?> e = (RunnableScheduledFuture<?>) r;
            queue[0] = e;
            return true;
        }

        @Override
        public RunnableScheduledFuture take() {
            RunnableScheduledFuture<?> first = queue[0];
            return first;
        }
    }


    private class CScheduledFutureTask<V> extends FutureTask<V> implements RunnableScheduledFuture<V> {

        CScheduledFutureTask(Runnable r, V result) {
            super(r, result);
        }

        @Override
        public boolean isPeriodic() {
            return false;
        }

        @Override
        public long getDelay(TimeUnit unit) {
            return 0;
        }

        @Override
        public int compareTo(Delayed o) {
            return 0;
        }
    }
    
}

 

public class CThreadPoolExecutor {

    private final CBlockingQueue<Runnable> workQueue;

    public CThreadPoolExecutor(CBlockingQueue<Runnable> workQueue) {
        this.workQueue = workQueue;
    }

    public CBlockingQueue<Runnable> getQueue() {
        return workQueue;
    }

    void ensurePrestart() {
        addWorker();
    }

    private boolean addWorker() {
        CWorker w = new CWorker();
        w.run();
        return true;
    }

    final void runWorker() {
        Runnable r = workQueue.take();
        r.run();
    }

    // 内部类
    private final class CWorker {
        public void run() {
            runWorker();
        }
    }

}

 

public class ScheduledTest {
    public static void main(String[] args) {
        CScheduledThreadPoolExecutor dtpe = new CScheduledThreadPoolExecutor();
        dtpe.test(() -> System.out.println("模拟CBlockingQueue泛型的类执行"), "");
    }
}

 

标签:return,RunnableScheduledFuture,CBlockingQueue,ScheduledThreadPoolExecutor,class,
From: https://www.cnblogs.com/dzpykj/p/17482859.html

相关文章

  • 016 数据库学习笔记--序列
    序列:获取唯一值,序列不支持事务回滚,会出现跳号SQLServer序列是一种逐步增加的命名的唯一的索引,它可以将一个整数标示符与一个数据行关联起来,并可保证该索引特别唯一。凭借这一特性,序列对于对数据进行安全且按照某种有意义的排序进行保存的场景非常有用。序列是一种用户定义的架......
  • Open AI ChatGPT Prompt 学习之基础篇
    ☕碎碎念2023年,最火的可能就是openAI了,其组织代表的产品chatGTP,相信大家已经有所耳闻。不少同学已经开始着手使用,并截图晒出ChatGPT是多么得智能与神奇。而有的同学在使用之后觉得有点差强人意,指出顶多算是一个比较聪明的聊天机器人而已。其实,ChatGPT的难点,在于Prompt(......
  • 机器学习随笔
    Python基础1.格式化输出:使用f-stringprint(f"str{vvariable}")Numpy相关https://www.runoob.com/numpy/numpy-ndarray-object.html1.np.array与np.ndarray的区别即ndarray是类,而array是函数,array构建的是一个ndarray的对象,使用默认构造函数创建的ndarray对象的数组元素......
  • 深度学习框架Keras
    模型亮点测试集上评分为1.0数据集由sklearn自带-----------------------------------------以下为模型具体实现-----------------------------------------Step1.数据读取how数据读取?使用load_iris命令,加载鸢尾花数据集fromsklearn.datasetsimportload_irisiris=......
  • 简单易学的机器学习算法——岭回归(Ridge Regression)
    一、一般线性回归遇到的问题  在处理复杂的数据的回归问题时,普通的线性回归会遇到一些问题,主要表现在:预测精度:这里要处理好这样一对为题,即样本的数量和特征的数量时,最小二乘回归会有较小的方差时,容易产生过拟合时,最小二乘回归得不到有意义的结果模型的解释能力:如果模型中的特征......
  • 简单易学的机器学习算法——协同过滤推荐算法(1)
    一、推荐系统的概念  推荐系统(RecommendationSystem,RS),简单来说就是根据用户的日常行为,自动预测用户的喜好,为用户提供更多完善的服务。举个简单的例子,在京东商城,我们浏览一本书之后,系统会为我们推荐购买了这本书的其他用户购买的其他的书:推荐系统在很多方面都有很好的应......
  • 最近学习spring声明式事务小结
    在一些需要同时操作几个更新的业务逻辑中,而这几个更新又是互相关联的,也就是说我们希望它成功就一起成功,失败就一起失败。这样我们就需要使用事务。关于如何配置spring声明式事务就不说了,需要的人可以在网上找下,肯定会配置一个类似下面的bean<beanid="cao"class......
  • Terraform学习
    转自:https://blog.csdn.net/u012562943/category_7644872.html ......
  • 深度学习应用篇-元学习[15]:基于度量的元学习:SNAIL、RN、PN、MN
    深度学习应用篇-元学习[15]:基于度量的元学习:SNAIL、RN、PN、MN1.SimpleNeuralAttentiveLearner(SNAIL)元学习可以被定义为一种序列到序列的问题,在现存的方法中,元学习器的瓶颈是如何去吸收同化利用过去的经验。注意力机制可以允许在历史中精准摘取某段具体的信息。SimpleN......
  • MarkDown学习(基本语法)
    MarkDown学习(基本语法)Typora前提:先在视图中打开大纲,更便于后续查看标题一级标题:#+空格+标题名字(或者内容后面快捷键ctrl+1)二级标题:##+空格+标题名字(或者内容后面快捷键ctrl+2)三级标题:......最多只到六级标题字体粗体:字体两边加**(选中内容后ctrl+b)HelloWorld!斜体:字体......