线程池 调度 java_java调度器和线程池总结

一、推荐使用的调度器和线程池

1、调度器

//2个线程的调度器

private static ScheduledThreadPoolExecutor pool = new ScheduledThreadPoolExecutor(2);

//5秒钟后每3分钟执行一次

pool.scheduleAtFixedRate(new TestTask(), 5, 60 * 3, TimeUnit.SECONDS);

;

2、线程池

//10个线程的线程池

ExecutorService pool = Executors.newFixedThreadPool(10);

//执行一个线程

pool.execute(new TestTask());

线程:

class TestTesk implements Runnable{

@Override

public void run() {

System.out.println("执行2....");

}

}

二、timer和timertask

Timer是一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行,可以看成一个定时器,可以调度TimerTask。TimerTask是一个抽象类,实现了Runnable接口,所以具备了多线程的能力。

一个Timer可以调度任意多个TimerTask,它会将TimerTask存储在一个队列中,顺序调度,如果想两个TimerTask并发执行,则需要创建两个Timer。下面来看一个简单的例子:

import java.util.Timer;

import java.util.TimerTask;

public class TimerTest {

static class MyTimerTask1 extends TimerTask {

public void run() {

System.out.println("爆炸!!!");

}

}

public static void main(String[] args) {

Timer timer = new Timer();

timer.schedule(new MyTimerTask1(), 2000);// 两秒后启动任务

//已当前时间为起点,每隔两秒执行一次

//timer.schedule(new MyTimerTask1(), new Date(), 2000);// 两秒后启动任务 }

}

三、比较

Timer对调度的支持是基于绝对时间的,因此任务对系统时间的改变是敏感的;而ScheduledThreadPoolExecutor支持相对时间。

Timer使用单线程方式来执行所有的TimerTask,如果某个TimerTask很耗时则会影响到其他TimerTask的执行;而ScheduledThreadPoolExecutor则可以构造一个固定大小的线程池来执行任务。

Timer 不会捕获由TimerTask抛出的未检查异常,故当有异常抛出时,Timer会终止,导致未执行完的TimerTask不再执行,新的 TimerTask也不能被调度;ScheduledThreadPoolExecutor对这个问题进行了妥善的处理,不会影响其他任务的执行。

总结:timer任务一旦有一个出错那么所有的任务都会中断,而ScheduledThreadPoolExecutor只会停止出错任务而不会停止其他任务

下面是一个ScheduledThreadPoolExecutor出错的例子:

import java.util.concurrent.ScheduledThreadPoolExecutor;

import java.util.concurrent.TimeUnit;

public class ScheduleTest {

public static void main(String[] args) {

ScheduledThreadPoolExecutor schedule = new ScheduledThreadPoolExecutor(2);

schedule.scheduleAtFixedRate(new TestTesk(), 2, 5, TimeUnit.SECONDS);

schedule.scheduleAtFixedRate(new TestTesk2(), 2, 5, TimeUnit.SECONDS);

}

}

class TestTesk implements Runnable{

@Override

public void run() {

System.out.println("执行1....");

String a = null;

System.out.println(a.length());

}

}

class TestTesk2 implements Runnable{

@Override

public void run() {

System.out.println("执行2....");

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/464647.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM GC调优总结 -Xms -Xmx -Xmn -Xss

堆大小设置 JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无…

MFC应用程序实例

新建FirstMFC对话框应用程序 此程序是开发一个口令对话框程序,包含了模式对话框与非模式方式调用对话框。 详细见源文件,地址: 共享链接:http://u.163.com/b47tr9n提取码:zxx0o2v2 小时钟程序 主要包含了定时器的启动与…

Linux驱动小技巧 | 利用DRIVER_ATTR实现调用内核函数

1. 前言 很多朋友在调试驱动的时候,都会遇到这样一个场景:修改一个参数,然后调用某个内核中的函数。比如将某个gpio的值拉高/拉低,修改某个寄存器的值等等。如果每一个参数都通过字符设备的ioctl接口,增加对应的cmd&am…

myeclipse运行java项目_myeclipse运行自己从前的或其他人的javaweb项目

1.配置javaweb 连接部署好本地的tomcat服务器方法如下:1.运行Myecipse-->Window-->preference2.MyEclipse-->Servers-->Runtime Environments-->add-->Apache Tomcat v8.03.next->Browser(Tomcat的安装目录)-->finishMyeclipse 设置jdk版本…

MYSQL性能调优及架构设计学习笔记-影响MYSQL性能的相关因素之实例分析

为什么80%的码农都做不了架构师?>>> 需求概述 一个简单的讨论区系统,需要有用户,用户组,组讨论区这三部分基本功能 简要分析 1) 须要存放用户数据的表; 2) 须要存放分组信息和用户与…

洛谷P2089 烤鸡 题解

题目背景 猪猪hanke得到了一只鸡 题目描述 猪猪Hanke特别喜欢吃烤鸡(本是同畜牲,相煎何太急!)Hanke吃鸡很特别,为什么特别呢?因为他有10种配料(芥末、孜然等),每种配料可…

java excel 导入 加校验_POI实现excel各种验证和导入的思路总结

制定标准导入总是与导出相辅相成的,无规矩不成方圆。所谓的标准都是大家一同来维护和遵守的,那么首先就是制定一个模板。这样可以减少验证的工作量。例如时间的规范【yyyy-MM-dd】,获取单元格的时间值用下面的方法java.util.Date date cell.g…

在一个公司10年,会怎么样?

大家好,我是写代码的篮球球痴。最近在知乎上看到一个话题那些在一个公司死磕了5-10年的人最后都怎么样了?"在互联网红利爆发,人心躁动的今天,可以在一个公司磕到5~10年,真的很不容易,我记得前东家要是…

公钥私钥

公钥私钥 <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />一&#xff0c;公钥私钥 1&#xff0c;公钥和私钥成对出现 2&#xff0c;公开的密钥叫公钥&#xff0c;只有自己知道的叫私钥 3&#xff0c;用公钥加密的数据只有…

软件测试第三次作业

一、开头 (1)合作者&#xff1a;201631062521&#xff0c;201631062421 (2)代码地址&#xff1a;https://gitee.com/h2503652646/WordCount.git (3)本次作业链接地址&#xff1a;https://edu.cnblogs.com/campus/xnsy/Test/homework/2203 二、正文 (1)互审代码情况 已经实现Wor…

equals()与==的区别

“”比较两个变量本身的值&#xff0c;即两个对象在内存中的首地址。“equals()”比较字符串中所包含的内容是否相同。 比如&#xff1a;String s1,s2,s3 "abc", s4 "abc" ;s1 new String("abc");s2 new String("abc");那么&#x…

Linux驱动开发中与设备树相关的6种debug方法

整理出了6种驱动开发时与设备注册、设备树相关的调试方法&#xff0c;彼此间没有优先级之分&#xff0c;每种方法不一定是最优解&#xff0c;但可以作为一种debug查找问题的手段&#xff0c;快速定位问题原因。例如在芯片验证时&#xff0c;不同时钟频率下系统启动情况摸底时&a…

hdu-1877(大数+进制转换)

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid1877 思路&#xff1a;注意考虑0,0的情况。 #include<iostream> #include<cstdio> #include<string> #include<algorithm> using namespace std; int m,a,b; string s1,s2; string add…

多线程(一)

1) 什么是线程&#xff1f; 线程是操作系统能够进行运算调度的最小单位&#xff0c;它被包含在进程之中&#xff0c;是进程中的实际运作单位。程序员可以通过它进行多处理器编程&#xff0c;你可以使用多线程对运算密集型任务提速。比如&#xff0c;如果一个线程完成一个任务要…

DiscoveryService.getRemoteAdvertisements是否会获得本地通告?

从该方法名称上来说&#xff0c;应该是不能获得本地通告&#xff0c;本着探究的精神&#xff0c;首先做个小测试&#xff0c;再从源代码中寻找答案。----------------------------------------------------------------------------- 测试结果&#xff1a;本地通告确实取不到&a…

java ssh 和mvc_JAVA三大框架SSH和MVC

Java—SSH(MVC)JAVA三大框架的各自作用hibernate是底层基于jdbc的orm(对象关系映射)持久化框架&#xff0c;即&#xff1a;表与类的映射&#xff0c;字段与属性的映射&#xff0c;记录与对象的映射 数据库模型 也就是Model;struts提供的丰富标签是用于显示层View;同时struts也充…

Linux的bc命令计算π的值预估系统算力

这是今天突然想到的一个事情&#xff0c;几年前我和一个朋友做一个开发板&#xff0c;然后我们需要完成的这个开发板有算力的要求&#xff0c;当时我们测试的时候就用了一个shell脚本来分析系统的算力。今天我突然想不起这个命令&#xff0c;然后就想写篇文章记录下&#xff0c…

hotmail在outlook2007中的设置

在姓名中输入你的名字&#xff08;用户可自定义&#xff09;&#xff0c;在电子邮件地址中输入你要设置OutLook的电子邮件地址&#xff0c;账户类型设为POP3&#xff0c;接收邮件服务器为pop3.live.com&#xff0c;发送邮件服务器为smtp.live.com。在用户名中输入你的邮箱用户名…

第九章 图形用户界面的并行化(待续)

为什么GUI是单线程的转载于:https://www.cnblogs.com/hzzjj/p/9825864.html

SQL版DNN的安装心得

最重要的是,DNN必须在WEB HOST 的根目录。中国RainBow提醒的。这是装成的关键&#xff01;另外的主要两个问题&#xff0c;一是CONNECTIONSTRING中的PWD有&符号&#xff0c;出错。通过SQL 的企业管理器登陆REMOTE SQL SERVER修改PASSWORD。(应该试一试 Integrated Security…