ava进阶(39)--守护线程与定时器
文档目录:
一、守护线程
二、定时器
---------------------------------------分割线:正文--------------------------------------------------------
一、守护线程
1、概念:
线程分为用户线程与守护线程(如垃圾回收线程)
2、特点:
一般守护线程是一个死循环,所有用户线程只要结束,守护线程自动结束
3、作用:
如每天00:00系统自动数据备份
需要使用定时器,并且可以将定时器设置为守护线程
4、举例说明
1 package JAVAADVANCE;
2
3 import java.util.TreeSet;
4
5 public class TestAdvance39TestThread01 {
6 public static void main(String[] args) {
7 Thread t=new BakDataThread();
8 t.setName("数据备份");
9 //启动线程前将线程设置为守护线程
10 t.setDaemon(true);
11 t.start();
12 //主线程,用户的线程
13 for(int i=0;i<5;i++){
14 System.out.println(Thread.currentThread().getName()+"----->"+i);
15 try {
16 Thread.sleep(1000);
17 } catch (InterruptedException e) {
18 e.printStackTrace();
19 }
20 }
21 }
22 }
23 class BakDataThread extends Thread{
24 @Override
25 public void run() {
26 int i=0;
27 while (true){
28 System.out.println(Thread.currentThread().getName()+"----->"+(++i));
29 try {
30 Thread.sleep(500);
31 } catch (InterruptedException e) {
32 e.printStackTrace();
33 }
34 }
35 }
36 }
查看运行结果:当主线程结束时守护线程结束
1 main----->0
2 数据备份----->1
3 数据备份----->2
4 数据备份----->3
5 main----->1
6 数据备份----->4
7 main----->2
8 数据备份----->5
9 数据备份----->6
110 main----->3
11 数据备份----->7
12 数据备份----->8
13 main----->4
14 数据备份----->9
15 数据备份----->10
二、定时器
1、作用:
间隔特定的时间执行特定的程序。
2、使用场景:
(1)定时数据备份
(2)每周银行账户总账操作
3、实现方式
(1)Java类:java.util.Timer定时器
(2)sprint Task框架,基于Timer
4、举例说明Timer()
1 package JAVAADVANCE;
2
3 import java.sql.SQLOutput;
4 import java.text.ParseException;
5 import java.text.SimpleDateFormat;
6 import java.util.Date;
7 import java.util.Timer;
8 import java.util.TimerTask;
9
10 public class TestAdvance39TestTimer {
11 public static void main(String[] args) {
12 //创建定时器对象
13 Timer timer=new Timer();
14 //等同于:Timer timer=new Timer(true);
15 //构造时间
16 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
17 Date firstTime= null;
18 try {
19 firstTime = sdf.parse("2020-04-03 00:20:00");
20 } catch (ParseException e) {
21 e.printStackTrace();
22 }
23 //指定定时任务
24 timer.schedule(new LogTimeTask(),firstTime,1000*5);
25 }
26 }
27
28 //编写定时器任务类
29 class LogTimeTask extends TimerTask{
30 @Override
31 public void run() {
32 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
33 String strTime=sdf.format(new Date());
34 System.out.println(strTime+":成功完成数据备份!");
35 }
36 }
查看运行结果:程序5秒执行一次
1 2021-04-03 00:24:37:成功完成数据备份!
2 2021-04-03 00:24:42:成功完成数据备份!
3 2021-04-03 00:24:47:成功完成数据备份!
4 2021-04-03 00:24:52:成功完成数据备份!
5 2021-04-03 00:24:57:成功完成数据备份!
6 2021-04-03 00:25:02:成功完成数据备份!
ava进阶(39)--守护线程与定时器的更多相关文章
- python_线程的开启、守护线程、锁、死锁、事件、定时器、条件、队列、池
0.承上 什么是线程? CPU调度的最小单位. 线程是进程的必要组成单位. 主线程: 程序开始运行的时候,就产生了一个主线进程来运行这个程序. 子线程: 是由主线程开启的其他线程. · 各线程之间的工 ...
- Python进阶----线程基础,开启线程的方式(类和函数),线程VS进程,线程的方法,守护线程,详解互斥锁,递归锁,信号量
Python进阶----线程基础,开启线程的方式(类和函数),线程VS进程,线程的方法,守护线程,详解互斥锁,递归锁,信号量 一丶线程的理论知识 什么是线程: 1.线程是一堆指令,是操作系统调度 ...
- Java多线程-线程的调度(守护线程)
本文转自http://www.cnblogs.com/linjiqin/p/3210004.html 感谢作者 守护线程与普通线程写法上基本没啥区别,调用线程对象的方法setDaemon(true), ...
- Java - 线程优先级和守护线程
Java多线程系列--“基础篇”10之 线程优先级和守护线程 概要 本章,会对守护线程和线程优先级进行介绍.涉及到的内容包括:1. 线程优先级的介绍2. 线程优先级的示例3. 守护线程的示例 转载请注 ...
- python网络编程--线程(锁,GIL锁,守护线程)
1.线程 1.进程与线程 进程有很多优点,它提供了多道编程,让我们感觉我们每个人都拥有自己的CPU和其他资源,可以提高计算机的利用率.很多人就不理解了,既然进程这么优秀,为什么还要线程呢?其实,仔细观 ...
- 【SSH网上商城项目实战15】线程、定时器同步首页数据(类似于博客定期更新排名)
转自:https://blog.csdn.net/eson_15/article/details/51387378 上一节我们做完了首页UI界面,但是有个问题:如果我在后台添加了一个商品,那么我必须重 ...
- 多线程深入理解和守护线程、子线程、锁、queue、evenet等介绍
1.多线程类的继承 import threading import time class MyThreading(threading.Thread): def __init__(self,n): su ...
- java守护线程。
java的守护线程:具体定义我也不太清楚,百度和谷歌了看的也不是很明白,但是啊,下边有给出一个例子自己领悟吧. 一.计时器的Timer声明时是否声明为守护线程对计时器的影响. /** * */ pac ...
- java中守护线程的一些概念和用法
网上的资料中,守护线程的功能一般都是“只要当前JVM实例中尚存任何一个非守护线程没有结束,守护线程就全部工作:只有当最后一个非守护线程结束是,守护线程随着JVM一同结束工作,Daemon作用是为其他线 ...
- 【java多线程】用户线程和守护线程的区别
java中线程分为两种类型:用户线程和守护线程.通过Thread.setDaemon(false)设置为用户线程:通过Thread.setDaemon(true)设置为守护线程.如果不设置次属性,默认 ...
随机推荐
- zookeeper JavaAPI 操作-watch监听
1.NodeCache监听代码: @Test public void testNodeCache() throws Exception { //1.创建NodeCache对象 NodeCache no ...
- ElasticSearch之cat recovery API
命令样例如下: curl -X GET "https://localhost:9200/_cat/recovery?v=true&pretty" --cacert $ES_ ...
- java框架Mybatis的第一个程序
1:什么是MyBatis MyBatis 是一款优秀的持久层框架 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程 MyBatis 可以使用简单的 XML 或注解来配 ...
- electron入门之通知Notification(二)
electron入门到入土,从渲染线程中创建新窗口.2022-03-21入门版本17.1.2 electron重要概念,只有一个主线程,其他都是渲染进程或者叫子线程,他们不能直接相互操作,可以通过ip ...
- Http 编码格式简介
Http 格式简介 Http 是用于在客户端和服务端之间进行通信的一种消息格式,一般由以下几个部分组成: 起始行:这部分在 Http 响应中也被称为状态行,针对不同的 Http 类型,其中包含的内容也 ...
- 【OpenVINO】 使用 OpenVINO CSharp API 部署 PaddleOCR 项目介绍
前言: 在之前的项目中,我们已经使用 OpenVINOTM CSharp API 部署 PaddleOCR 全系列模型,但随着PaddleOCRv4版本发布以及OpenVINO CSharp AP ...
- Typora+Docsify快速入门
Typora是什么? Typora中文版是一款好用极简的跨平台Markdown编辑器,软件使用这款软件能够帮助用户轻松将文本转换到HTML,软件从底层向上设计,软件支持markdown的标准语法, ...
- Flutter Getx 状态管理 --- 响应式状态管理器
状态管理 Get 并不是比任何其他状态管理器更好或更差,而是说你应该分析这些要点以及下面的要点来选择只用 Get,还是与其他状态管理器结合使用. Get不是其他状态管理器的敌人,因为Get是一个微框架 ...
- 痞子衡嵌入式:原来i.MXRT1170内部RAM的ECC初始化工作可全部由ROM完成
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1170内部RAM的ECC初始化工作可全部由ROM完成. 痞子衡之前写了三篇文章 <M7 FlexRAM ECC> ...
- PostgreSQL常用运维SQL
一.数据库连接 1.获取数据库实例连接数 select count(*) from pg_stat_activity; 2.获取数据库最大连接数 show max_connections 3.查询当前 ...