设置守护线程判断每位员工是否可以下班,要求员工时间大于或等于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小时才能够下班相关推荐

  1. java setdaemon_Java中守护线程的总结 thread.setDaemon(true)

    在Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) 用个比较通俗的比如,任何一个守护线程都是整个JVM中所有非守护线程的保姆: 只要当前JVM实例中尚存 ...

  2. JVM 中的守护线程

    在之前的<详解JVM如何处理异常>提到了守护线程,当时没有详细解释,所以打算放到今天来解释说明一下JVM守护线程的内容. 特点 通常由JVM启动 运行在后台处理任务,比如垃圾回收等 用户启 ...

  3. java的守护线程与非守护线程

    守护线程最典型的应用就是GC,它是一个很好的守护者. 最近重新研究Java基础知识,发现以前太多知识知识略略带过了,比较说Java的线程机制,在Java中有两类线程:User Thread(用户线程) ...

  4. Java中的守护线程和非守护线程(转载)

    <什么是守护线程,什么是非守护线程> Java有两种Thread:"守护线程Daemon"(守护线程)与"用户线程User"(非守护线程). 用户线 ...

  5. java中的守护线的应用_JVM中的守护线程示例详解

    前言 在Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) 用个比较通俗的比如,任何一个守护线程都是整个JVM中所有非守护线程的保姆: 只要当前JVM实例 ...

  6. java守护线程的使用场景_浅谈Java守护线程

    一.在Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) 1.Daemon的作用是为其他线程的运行提供便利服务,守护线程最典型的应用就是 GC (垃圾回收 ...

  7. 守护线程与线程阻塞的四种情况

    守护线程  Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) 用户线程即运行在前台的线程,而守护线程是运行在后台的线程. 守护线程作用是为其他前台线程的 ...

  8. Java并发编程(4):守护线程与线程阻塞的四种情况

    守护线程 Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) 用户线程即运行在前台的线程,而守护线程是运行在后台的线程. 守护线程作用是为其他前台线程的运 ...

  9. java中的守护线程

    在Java中有两类线程:User Thread(用户线程).Daemon Thread(守护线程) 用个比较通俗的比如,任何一个守护线程都是整个JVM中所有非守护线程的保姆: 只要当前JVM实例中尚存 ...

最新文章

  1. python3读取excel文件(xls/xlsx)
  2. Linux文件系统基础之inode和dentry
  3. MPLS ×××的三部分CE、PE和P简介
  4. docker Registry镜像仓库
  5. python中object是什么数据类型_自学Python2.1-基本数据类型-字符串str(object) 上
  6. 腾讯云与智慧产业总裁汤道生:产业互联网是一场“持久战”
  7. linux 没有那个文件或目录_【新视频进度】国庆节至今更新6节quot;嵌入式Linux应用开发基础quot;...
  8. 使用java进行图像处理_使用Java进行图像处理
  9. Codeforces 832 D Misha, Grisha and Underground
  10. lol峡谷之巅区服务器位置,LOL: 论峡谷之巅和艾欧尼亚哪个区水平更高?
  11. python开发ios程序_使用Python开发iOS程序
  12. 实用小技术:Excel+网易邮箱处理VCF与CSV文件批量添加联系人
  13. 直流可逆调速控制系统matlab,逻辑无环流直流可逆调速系统的Matlab仿真
  14. N卡所有旧版本驱动下载
  15. ubuntu 下使用tar将文件夹(大文件)分包压缩
  16. 这是一个赞赏码(附赞赏码生成方法)
  17. 【蓝桥杯】看完这些,还在担心自己拿不到奖?
  18. 7-45 连年 7-69 求婚
  19. 怎样理解电磁兼容电路
  20. android开屏页单张图片设置的收评秒开引起的图片变形问题

热门文章

  1. 【题库】上海市学校心理咨询师考试-普通心理学-考点解析 2.3 大脑皮层的功能
  2. 学习日记08 08——超级数组
  3. 共建大数据+声纹AI新安全时代:得意音通与同盾科技达成战略合作
  4. 想学Python的小东的第一篇博客
  5. aws beanstalk mysql_DevOps on AWS之Elastic BeanStalk
  6. 怎么看计算机远程桌面的端口号,远程桌面端口-windows如何设置远程桌面登录的端口号...
  7. Windows server远程桌面端口修改
  8. Random walk(期望值和方差)
  9. Qt之标准对话框(QMessageBox、QFileDialog)
  10. 想做新媒体运营有前途吗