Thread守护线程判断每位员工是否可以下班,要求员工时间大于或等于8小时才能够下班
设置守护线程判断每位员工是否可以下班,要求员工时间大于或等于8小时才能够下班
package com.tw.thread;import lombok.SneakyThrows;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Random;
import java.util.concurrent.TimeUnit;/*** @title: Woker* @projectName: learn* @description: 上下班时间*/
public class Worker extends Thread {//上班打卡时间private Date beginTime;//下班时间private Date endTime;//下班状态private boolean isStop;public Worker(Date beginTime) {this.beginTime = beginTime;}@SneakyThrowspublic void run() {final Thread self = Thread.currentThread();final SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");final String bStr = sdf.format(beginTime);System.out.println(self.getId() + "员工卡号" + bStr + "打卡上班");final Calendar cal = Calendar.getInstance();cal.setTime(beginTime);final Random random = new Random();while (true) {TimeUnit.SECONDS.sleep(3);if (isStop) {final String eStr = sdf.format(endTime);System.out.println(self.getId() + "员工" + eStr + "下班............");} else {final int hour = random.nextInt(5);cal.set(Calendar.HOUR_OF_DAY, cal.get(Calendar.HOUR_OF_DAY) + hour);endTime = cal.getTime();}}}public boolean getStop() {return isStop;}public void setStop(boolean stop) {isStop = stop;}public Date getEndTime() {return endTime;}public double getWorkerLongTime() {return (endTime.getTime() - beginTime.getTime()) / (1000 * 60 * 60);}
}
package com.tw.thread;import lombok.SneakyThrows;import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;/*** @title: Sweeper* @projectName: learn* @description: 守护线程、定时监督*/
public class Sweeper extends Thread{private List<Worker> workers = new ArrayList<>();private Sweeper(){this.setDaemon(true);//守护线程}@SneakyThrowspublic void run(){while (true){for (int i = 0; i < workers.size(); i++) {Worker worker = workers.get(i);if(worker.getEndTime()!=null && worker.getStop()){final double longTime = worker.getWorkerLongTime();if(longTime>=0){worker.setStop(true);System.out.println(worker.getId()+"员工超过八个小时,可以下班了!");}else {System.out.println(worker.getId()+"员工不足八个小时,不能下班");}TimeUnit.SECONDS.sleep(1);}}}}public void addWorker(Worker worker){this.workers.add(worker);}public static void main(String[] args) {final Sweeper sweeper = new Sweeper();sweeper.start();final Worker w1 = new Worker(new Date());sweeper.addWorker(w1);final Worker w2 = new Worker(new Date());sweeper.addWorker(w2);final Worker w3 = new Worker(new Date());sweeper.addWorker(w3);w1.start();w2.start();w3.start();}
}
Thread守护线程判断每位员工是否可以下班,要求员工时间大于或等于8小时才能够下班相关推荐
- java setdaemon_Java中守护线程的总结 thread.setDaemon(true)
在Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) 用个比较通俗的比如,任何一个守护线程都是整个JVM中所有非守护线程的保姆: 只要当前JVM实例中尚存 ...
- JVM 中的守护线程
在之前的<详解JVM如何处理异常>提到了守护线程,当时没有详细解释,所以打算放到今天来解释说明一下JVM守护线程的内容. 特点 通常由JVM启动 运行在后台处理任务,比如垃圾回收等 用户启 ...
- java的守护线程与非守护线程
守护线程最典型的应用就是GC,它是一个很好的守护者. 最近重新研究Java基础知识,发现以前太多知识知识略略带过了,比较说Java的线程机制,在Java中有两类线程:User Thread(用户线程) ...
- Java中的守护线程和非守护线程(转载)
<什么是守护线程,什么是非守护线程> Java有两种Thread:"守护线程Daemon"(守护线程)与"用户线程User"(非守护线程). 用户线 ...
- java中的守护线的应用_JVM中的守护线程示例详解
前言 在Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) 用个比较通俗的比如,任何一个守护线程都是整个JVM中所有非守护线程的保姆: 只要当前JVM实例 ...
- java守护线程的使用场景_浅谈Java守护线程
一.在Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) 1.Daemon的作用是为其他线程的运行提供便利服务,守护线程最典型的应用就是 GC (垃圾回收 ...
- 守护线程与线程阻塞的四种情况
守护线程 Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) 用户线程即运行在前台的线程,而守护线程是运行在后台的线程. 守护线程作用是为其他前台线程的 ...
- Java并发编程(4):守护线程与线程阻塞的四种情况
守护线程 Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) 用户线程即运行在前台的线程,而守护线程是运行在后台的线程. 守护线程作用是为其他前台线程的运 ...
- java中的守护线程
在Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) 用个比较通俗的比如,任何一个守护线程都是整个JVM中所有非守护线程的保姆: 只要当前JVM实例中尚存 ...
最新文章
- python3读取excel文件(xls/xlsx)
- Linux文件系统基础之inode和dentry
- MPLS ×××的三部分CE、PE和P简介
- docker Registry镜像仓库
- python中object是什么数据类型_自学Python2.1-基本数据类型-字符串str(object) 上
- 腾讯云与智慧产业总裁汤道生:产业互联网是一场“持久战”
- linux 没有那个文件或目录_【新视频进度】国庆节至今更新6节quot;嵌入式Linux应用开发基础quot;...
- 使用java进行图像处理_使用Java进行图像处理
- Codeforces 832 D Misha, Grisha and Underground
- lol峡谷之巅区服务器位置,LOL: 论峡谷之巅和艾欧尼亚哪个区水平更高?
- python开发ios程序_使用Python开发iOS程序
- 实用小技术:Excel+网易邮箱处理VCF与CSV文件批量添加联系人
- 直流可逆调速控制系统matlab,逻辑无环流直流可逆调速系统的Matlab仿真
- N卡所有旧版本驱动下载
- ubuntu 下使用tar将文件夹(大文件)分包压缩
- 这是一个赞赏码(附赞赏码生成方法)
- 【蓝桥杯】看完这些,还在担心自己拿不到奖?
- 7-45 连年 7-69 求婚
- 怎样理解电磁兼容电路
- android开屏页单张图片设置的收评秒开引起的图片变形问题
热门文章
- 【题库】上海市学校心理咨询师考试-普通心理学-考点解析 2.3 大脑皮层的功能
- 学习日记08 08——超级数组
- 共建大数据+声纹AI新安全时代:得意音通与同盾科技达成战略合作
- 想学Python的小东的第一篇博客
- aws beanstalk mysql_DevOps on AWS之Elastic BeanStalk
- 怎么看计算机远程桌面的端口号,远程桌面端口-windows如何设置远程桌面登录的端口号...
- Windows server远程桌面端口修改
- Random walk(期望值和方差)
- Qt之标准对话框(QMessageBox、QFileDialog)
- 想做新媒体运营有前途吗