java计时器

news2024/11/28 6:53:58
  •  

  • 在 Java中,我们有一个重要的概念:同步和异步。同步就是 Java中的线程安全,异步就是 Java中的线程非安全。 在使用 JVM时,我们一般都是用 start ()方法启动一个线程,然后设置时间,比如定时器,定时器是在某个指定的时间执行相应的任务。但是,在实际应用中,我们会遇到一些特殊的场景:比如我们要定时的计算一个数,我们不想每次都去执行 sleep ()或者 wait ()方法。 此时,如果我们不用定时器,而是直接使用计时器,这个时候计时器就会开始计时;如果要使用定时器来计算一个数,那么定时器就会暂停计时。下面我们来看一个简单的例子。

    • 1、初始化

      下面我们来看下初始化,首先,我们先来看一下定时器怎么初始化: 上面这个代码是通过循环来进行的,每执行一次循环就会执行一个线程,当线程运行到某个值时,它就会停止。而这个值是定时器里面的 current类中的一个方法: 那么如何获取 current类中的一个方法呢? 上面的代码是通过循环来进行的,这里我们将 current类中的 decrease方法拿出来,然后利用这个方法来获取 current类中的一个方法: 当获取到 current类中的一个方法后,我们可以将其注册到 runtime里面。下面我们来看一下这个 current类中的 decrease方法: 上面的代码是通过循环来进行初始化的,下面我们再看一下它是如何运行起来的:

    • 2、暂停计时

      上面的代码使用了一个 sleep ()方法来进行定时器的暂停,当我们不想执行 sleep ()方法时,就可以直接使用计时器,这样一来,如果使用计时器的话,就会暂停计时,从而避免了中断任务。 但实际上,我们还可以使用 run ()方法来进行暂停计时。run ()方法也是用来启动一个线程的,不过和上面的代码不同的是: run ()方法并不是调用 start ()方法,而是调用了 run ()。 Run ()方法。 run ()方法就是通过调用当前线程的 start ()方法来启动一个新的线程。然后在 run ()方法中设置好定时器的时间,当定时器的时间到了后就会执行相应的任务。 使用上面的例子可以发现:我们其实是不用通过 start ()来启动新线程的。这样就避免了中断任务;而且如果我们直接调用定时器来执行任务的话,也会比直接使用计时器更加高效。 另外, java中还有一个叫做 synchronized的方法,它和 start ()、 run ()有很大的区别。 synchronized是用来在线程之间传递参数的,也就是说 java中所有线程都可以调用 synchronized,当某个线程调用 synchronized时,其他线程就不能再执行这个任务了。

    • 3、重置

      如果我们在上面的例子中,使用了 undefined ()方法,那么这个时候我们就可以使用重置计时器来进行重置了。 我们首先定义一个对象,这个对象代表的是一个定时器,然后在对象内部的java.util.co ncur rent. thread方法中定义一个计时函数。 然后在循环中,当当前计时的值小于等于0的时候,我们就停止计时。如果当前计时值大于0,那么我们就继续计时。此时,如果当前计时器执行的是 wait ()方法,那么该方法将会一直等待执行。 接下来我们看一下重置计时器的使用场景: 上面的代码主要是使用重置计时器来实现计时器和定时器中断两个功能,我们只需要设置两个参数就可以了。

    • 4、返回

      上面的代码是不是很简单,而且我们只需要调用一个定时器,就能实现计时、暂停和返回三个功能。这其实很容易理解,因为我们只要设置好一个定时器的时间,就能完成定时任务,并且将结果返回给用户。 其实在 Java中,除了上述的三种功能外,还有很多其他的定时方法。上面代码中,我们在 java. util. TimerCount方法中设置了一个定时器的时间和数量。当时间到达后,就会执行 wait ()方法,在此之前的定时器不会执行任何操作。而如果设置的时间还没有到达,就会调用 sleep ()方法。在 sleep ()方法中,我们也可以设置定时器的时间和数量,例如设置一个小时,然后再定时器中计时。 上面的代码中,我们使用了一个 readLine ()方法来获取一个数的数值。当这个数为0时,会调用 wait ()方法来停止计时。但是我们使用了一个定时器来计时。因为如果使用 sleep ()方法计算出的结果是0的话,那么这个数就无法计算出来。 在上面的例子中:定时器用来计算一个数时;使用了 sleep ()和 wait ()方法来暂停计时;而在计算完后又使用了 readLine ()方法来返回结果。 以上就是 Java中使用定时器的简单方法和效果。如果有什么不明白的地方,可以在下方评论留言!

    • 5、总结

      在使用 JVM时,我们经常需要设置一个计时器,但是,在实际应用中,我们会遇到一些特殊的场景。如果不使用计时器,那么线程就会一直运行下去;如果要使用计时器,那么这个时候就会暂停计时。其实, JVM有两种方式可以让线程停止计时。 第一种是 start ()方法:每次调用 start ()方法时, JVM就会启动一个新的线程,就会暂停计时;当再次调用 start ()方法时, JVM就会重新启动新的线程。 当两个方法都被调用时, JVM就会停止计时。 为了让我们的程序更加稳定,所以 java提供了一些特性。比如: 可以通过 sleep ()和 wait ()来设置等待时间; 可以使用try-catch语句来保证线程安全; 可以通过 synchronized关键字来实现同步; 可以使用try-except关键字来禁止代码中的异常;

常用的java计时器代码:

1. 使用Timer类实现计时器
```java
import java.util.Timer;
import java.util.TimerTask;
public class MyTimer {
public static void main(String[] args) {
Timer timer = new Timer();
timer.schedule(new TimerTask() {
int count = 0;
@Override
public void run() {
count++;
System.out.println("计时器已经运行了 " + count + " 秒");
}
}, 0, 1000);
}
}
```
2. 使用ScheduledExecutorService类实现计时器
```java
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class MyTimer {
public static void main(String[] args) {
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.scheduleAtFixedRate(new Runnable() {
int count = 0;
@Override
public void run() {
count++;
System.out.println("计时器已经运行了 " + count + " 秒");
}
}, 0, 1, TimeUnit.SECONDS);
}
}
```
3. 使用System.currentTimeMillis()实现计时器
```java
public class MyTimer {
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
int count = 0;
while (true) {
long currentTime = System.currentTimeMillis();
if (currentTime - startTime >= 1000) {
count++;
System.out.println("计时器已经运行了 " + count + " 秒");
startTime = currentTime;
}
}
}
}
```

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

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

相关文章

Android开发中,自定义注解的两种应用方式

java注解在Android开发中主要有两种使用方式;一种是在程序运行期间获取类的信息进行反射调用;另一种是使用注解处理,在编译期间生成相关代码,然后在运行期间通过调用这些代码来实现相关功能。 我们先了解一下注解的分类和关键字 …

前端实用js dom合集

1. 整个网页变为灰色主题,最外层加css样式:filter:grayscale(1) 黑色主题:filter:invert(1) 2.js剪辑视频片段制作gif动图: 效果:点击开始就开始录制,点击结束右边显示生成的gif动图 生成g…

Python程序异常处理

一、什么是异常 异常就是程序运行时发生错误的信号,在程序由于某些原因出现错误的时候,若程序没有处理它,则会抛出异常,程序也的运行也会随之终止; 程序异常带来的问题: 1.程序终止,无法运行…

浙大数据结构(1)

开始学习数据结构(拖了好久终于开干了) 来自【浙江大学】数据结构(合149讲)陈越 何钦铭 Be a Fighter and Keep Fighting!!! 数据结构(data structure)定义 是计算机中存储,组织数据的方法。通常情况下,精心选择的数据结构可以带…

Chapter7-吞吐量优先的使用场景

7.1 在 Broker 端进行消息过滤 在 Broker 端进行消息过滤,可以减少无效消息发送到 Consumer ,少占用网络带宽从而提高吞吐量。 Broker 端有三种方式进行消息过滤 。 7.1.1 消息的 Tag 和 Key 对一个应用来说,尽可能只用一个 Topic &#xff…

【数据结构学习3】线性表-链表、单链表

目录链式存储结构链表概念头结点的意义单链表的定义和表示单链表的基本操作链式存储结构 链表概念 概念 结点在存储器中的位置是任意的,即逻辑上相邻的数据元素在物理上不一定相邻。线性表的链式表示又称为非顺序映像或链式映像用一组物理位置任意的存储单元来存…

三公经费用泛微全过程数字化管理,使用有记录,付款有依据

公开透明是现代财政制度的重要准则和基本特征。组织要以公开、透明、科学的预算制度确定财政支出,贯穿预算编制、执行、监督全过程。 组织常见的费用管理——“三公”经费,通常指因公出国(境)费、公务用车购置及运行费、公务接待…

富士康转移3000亿产能,iPhone的印度产能倍增,不再“赏饭吃”

日前消息指今年三月份印度的iPhone产量已经是去年的四倍之多,占比将近7%,显示出苹果和富士康都在加速提升印度的iPhone产能,凸显出他们的决心,这对中国制造业将带来深远影响。一、富士康对中国制造影响巨大2021年的数据…

leetcode每日一题:数组篇(1/2)

😚一个不甘平凡的普通人,日更算法学习和打卡,期待您的关注和认可,陪您一起学习打卡!!!😘😘😘 🤗专栏:每日算法学习 💬个人…

key的作用和原理、列表过滤

一、key的作用与原理 虚拟DOM对象的标识。当状态中的数据发生变化时,vue会根据新数据生成新的虚拟DOM。随后vue进行新虚拟DOM与旧虚拟DOM的差异比较,规则如下:对比规则: 旧虚拟DOM中找到了与新虚拟DOM相同的key 若虚拟DOM中内容没…

Iceberg 数据湖是什么?数据湖能解决什么问题?独立于计算层和存储层之间的表格层?

Iceberg 数据湖是什么?数据湖能解决什么问题?独立于计算层和存储层之间的表格层?0. 导读1. Hive数仓遇到的问题2. 一种开放的表格式3. 自下而上的元数据4. 高性能的查询4.1 分区剪裁4.2 文件过滤4.3 RowGroup过滤参考:https://ice…

kafka-4 生产者和消费者

kafka的生产者和消费者四、 生产者4.1 分区分配策略4.2 副本和消息消费4.2.1 副本(AR、ISR、OSR)4.2.2 HW与LEO4.2.3 ISR 集合和 HW、LEO的关系五、消费者5.1 分区分配策略5.2 消费者offset的存储四、 生产者 4.1 分区分配策略 (1&#xff…

【20】linux进阶——linux的数据流和重定向

大家好,这里是天亮之前ict,本人网络工程大三在读小学生,拥有锐捷的ie和红帽的ce认证。每天更新一个linux进阶的小知识,希望能提高自己的技术的同时,也可以帮助到大家 另外其它专栏请关注: 锐捷数通实验&…

一、LED子系统框架分析

个人主页:董哥聊技术我是董哥,嵌入式领域新星创作者创作理念:专注分享高质量嵌入式文章,让大家读有所得!文章目录1、前言2、LED裸机处理3、LED子系统框架4、LED子系统目录结构及核心文件5、sysfs目录结构5.1 确保LED子…

低代码开发重要工具:私有化部署的jvs-logic的设计与价值

逻辑引擎介绍 逻辑引擎是一种能够处理逻辑表达式的程序,它能够根据用户输入的表达式计算出表达式的值。在实际应用中,逻辑引擎通常被用于处理规则引擎、决策系统、业务规则配置等领域,具有广泛的应用前景。 逻辑引擎如下图所示,在…

Hive中SQL基本操作

文章目录1. Hive 中DDL1) 数据库操作2) 创建表 Create table3)内部外部表区别4) Create Table As Select (CTAS)4)分区表 partition2 .Hive中 DML1)从文件加载数据 Loading files into tables2)插入 INSERT3)更新 UPDA…

《疯狂Java讲义》读书笔记7

Navicat快捷键 刷新:FnF5 表内容页面打开表设计页面:CtrlD 打开 MYSQL 命令行窗口:FnF6 MYSQL 增减查改 create table student(stuid int not null auto_increment primary key,stuname varchar(200),stustatus varchar(100) ); create …

TCP/IP协议工作原理与工作流程

一、TCP/IP协议工作原理 1、OSI模型 使用OSI模型来描述一个网络中的各个协议层,如下: 2、理解TCP/IP协议 TCP/IP协议,英文全称Transmission Control Protocol/Internet Protocol,包含了一系列构成互联网基础的网络协议&#xff0…

本地部署ChatGLM-6B模型(使用JittorLLMs大模型推理库)

简介 网上冲浪时发现的这两个国产模型,重点是对硬件的要求并不高,有2GB内存就可以跑,觉得有趣就弄来玩了下。 https://github.com/Jittor/JittorLLMs https://github.com/THUDM/ChatGLM-6B 简单介绍下用到的仓库 ChatGLM-6B ChatGLM-6B 是…

有偏估计的发展及其在球谐函数拟合中的应用研究

有偏估计的发展及其在球谐函数拟合中的应用研究 阚昊宇 专业:大地测量与测量工程 学号:XXX 邮箱:XXX 电话:XXX 摘要:球谐函数在大地测量等领域具有重要意义,然而在观测量不多或空间分布不均匀时进行高阶…