Thread守护线程判断每位员工是否可以下班,要求员工时间大于或等于8小时才能够下班

本文主要是介绍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小时才能够下班的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/815465

相关文章

对postgresql日期和时间的比较

《对postgresql日期和时间的比较》文章介绍了在数据库中处理日期和时间类型时的一些注意事项,包括如何将字符串转换为日期或时间类型,以及在比较时自动转换的情况,作者建议在使用数据库时,根据具体情况... 目录PostgreSQL日期和时间比较DB里保存到时分秒,需要和年月日比较db里存储date或者ti

Python判断for循环最后一次的6种方法

《Python判断for循环最后一次的6种方法》在Python中,通常我们不会直接判断for循环是否正在执行最后一次迭代,因为Python的for循环是基于可迭代对象的,它不知道也不关心迭代的内部状态... 目录1.使用enuhttp://www.chinasem.cnmerate()和len()来判断for

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g

shell脚本快速检查192.168.1网段ip是否在用的方法

《shell脚本快速检查192.168.1网段ip是否在用的方法》该Shell脚本通过并发ping命令检查192.168.1网段中哪些IP地址正在使用,脚本定义了网络段、超时时间和并行扫描数量,并使用... 目录脚本:检查 192.168.1 网段 IP 是否在用脚本说明使用方法示例输出优化建议总结检查 1

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

C语言线程池的常见实现方式详解

《C语言线程池的常见实现方式详解》本文介绍了如何使用C语言实现一个基本的线程池,线程池的实现包括工作线程、任务队列、任务调度、线程池的初始化、任务添加、销毁等步骤,感兴趣的朋友跟随小编一起看看吧... 目录1. 线程池的基本结构2. 线程池的实现步骤3. 线程池的核心数据结构4. 线程池的详细实现4.1 初

如何用Java结合经纬度位置计算目标点的日出日落时间详解

《如何用Java结合经纬度位置计算目标点的日出日落时间详解》这篇文章主详细讲解了如何基于目标点的经纬度计算日出日落时间,提供了在线API和Java库两种计算方法,并通过实际案例展示了其应用,需要的朋友... 目录前言一、应用示例1、天安门升旗时间2、湖南省日出日落信息二、Java日出日落计算1、在线API2

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

Java子线程无法获取Attributes的解决方法(最新推荐)

《Java子线程无法获取Attributes的解决方法(最新推荐)》在Java多线程编程中,子线程无法直接获取主线程设置的Attributes是一个常见问题,本文探讨了这一问题的原因,并提供了两种解决... 目录一、问题原因二、解决方案1. 直接传递数据2. 使用ThreadLocal(适用于线程独立数据)

如何使用 Bash 脚本中的time命令来统计命令执行时间(中英双语)

《如何使用Bash脚本中的time命令来统计命令执行时间(中英双语)》本文介绍了如何在Bash脚本中使用`time`命令来测量命令执行时间,包括`real`、`user`和`sys`三个时间指标,... 使用 Bash 脚本中的 time 命令来统计命令执行时间在日常的开发和运维过程中,性能监控和优化是不