Java定时任务

Java创建定时任务的几种方式,你还不会? 文章目录前言一、单机环境下创建1.使用TimerTask创建定时任务2.使用线程池创建定时任务3.使用spring内置定时任务@Scheduled 注解二、分布式环境下创建1.使用Quartz框架1.1 Spring集成方式1.1.1 添加pom依赖1.1.2 初始化Quartz的表1.1.3 初始化自定义的定时任务表1.1.4 编写配置类1.1.5 编写自定义的工厂类1.1.6 编写一个测试任务调度类1.1.7 编写一个任务调度工具类1.1.8 编写controller类1.1.9 编写service类. 阅读详情

http://blog.youkuaiyun.com/xyang81/article/details/7425943

在日常工作中,定时进行任务调度的业务随处可见,比如:定时清理系统的临时文件、有新的活动定时向用户发送电子邮件、定时检查系统是否需要更新、定时发送短信等业务。在Java中由两个类完成定时任务的调度,分别为:java.util.Timer和java.util.TimerTask

创建一个定时任务的步聚:

1、创建一个定时器(Timer)对象

2、调用该对象的schedule(TimerTask task, long delay, long period)或scheduleAtFixedRate(TimerTask task, long delay, long period)方法


任务调度方法参数说明:

task:表示要执行的具体任务

delay:表示任务创建完成后,第一次什么时候开始执行该任务,以毫秒为单位

period:表示第一次执行完任务后,后续重复执行该任务的时间间隔是多长,以毫秒为单位


schedule方法与scheduleAtFixedRate方法的区别:

方法任务执行时间当任务执行时间大于间隔时间时
schedule上次任务的结束时间+时间间隔阻塞式,任务会延后,等待前面的任务执行完,再执行延务后的任务
scheduleAtFixedRate上次任务的执行时间+时间间隔任务不会延后,但要考虑多线程并发的问题。因为当一个任务还没执行完时,下一个时间间隔任务又会启动,执行相同的任务

注意:每启动一个新任务,就会启动一个新的线程!


实例:

[java]  view plain copy
  1. package taskschedule;  
  2.   
  3. import java.text.SimpleDateFormat;  
  4. import java.util.Calendar;  
  5. import java.util.Timer;  
  6. import java.util.TimerTask;  
  7.   
  8. /* 
  9.  * 定时器 
  10.  *  
  11.  * schedule():下一次任务的执行时间,等于上一次任务的结束时间+时间间隔 
  12.  *  
  13.  * scheduleAtFixedRate():下一次任务的执行时间,等于上一次任务的开始时间+时间间隔 
  14.  *  
  15.  * 当执行任务的时间大于时间间隔时: 
  16.  * schedule任务会延后。 
  17.  * scheduleAtFixedRate任务不会延后,仍然在时间间隔内执行,存在并发性,要考虑线程同步的问题 
  18.  */  
  19. public class TimerTest {  
  20.       
  21.     private static int count = 0;  
  22.       
  23.     public static void main(String[] args) {  
  24.         task_1();  
  25.           
  26.         //task_2();  
  27.           
  28.         //task_3();  
  29.           
  30.         //task_4();  
  31.           
  32.         //主线程  
  33.         while(true) {  
  34.             System.out.println(Calendar.getInstance().get(Calendar.SECOND));  
  35.             try {  
  36.                 Thread.sleep(1000);  
  37.             } catch (InterruptedException e) {  
  38.                 e.printStackTrace();  
  39.             }  
  40.         }  
  41.     }  
  42.       
  43.     //任务1:第一次延迟3秒后启动任务,后续每隔2秒启动一次任务  
  44.     private static void task_1() {  
  45.         new Timer().schedule(new TimerTask(){  
  46.   
  47.             @Override  
  48.             public void run() {  
  49.                 System.out.println(Thread.currentThread().getName() + "定时任务已启动!");  
  50.                   
  51.             }}, 3000,2000);   
  52.     }  
  53.       
  54.     //任务2:交互执行,方式1:第一次延迟2秒后启动任务,后续每隔在3秒和6秒之间切换启动任务  
  55.     private static void task_2() {  
  56.         class MyTimerTask extends TimerTask {  
  57.               
  58.             @Override  
  59.             public void run() {  
  60.                 count = (count+1)%2;  
  61.                 System.out.println(Thread.currentThread().getName() + "定时任务已启动!");  
  62.                   
  63.                 new Timer().schedule(new MyTimerTask(), 3000 + 3000 * count);   //循环调用  
  64.             }  
  65.         }  
  66.           
  67.         new Timer().schedule(new MyTimerTask(), 2000);  //2秒后启动定时器  
  68.     }  
  69.       
  70.     //任务3:交互执行,方式2:第一次延迟2秒后启动任务,后续每隔在3秒和6秒之间切换启动任务  
  71.     public static void task_3() {  
  72.         new Timer().schedule(new MyTimerTaskA(), 300);  
  73.     }  
  74.       
  75.     //任务4:演示scheduleAtFixedRate方法,第一次延迟2秒后启动任务,后续每隔3秒后启动任务,但任务执行时间大于等于6秒  
  76.     public static void task_4() {  
  77.         TimerTask task = new TimerTask(){  
  78.   
  79.             @Override  
  80.             public void run() {  
  81.                 System.out.println("execute task:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime()));  
  82.                 try {  
  83.                     Thread.sleep(6000);  
  84.                 } catch (InterruptedException e) {  
  85.                     e.printStackTrace();  
  86.                 }  
  87.                 System.out.println(Thread.currentThread().getName() + "定时任务已启动!");  
  88.             }  
  89.         };  
  90.           
  91.         new Timer().scheduleAtFixedRate(task, 2000, 3000);  
  92.     }  
  93. }  
  94.   
  95. //描述2个任务切换启动  
  96. class MyTimerTaskA extends TimerTask {  
  97.   
  98.     @Override  
  99.     public void run() {  
  100.         System.out.println(Thread.currentThread().getName() + "任务已启动!");  
  101.         new Timer().schedule(new MyTimerTaskB(),2000);  
  102.     }  
  103.       
  104. }  
  105.   
  106. class MyTimerTaskB extends TimerTask {  
  107.       
  108.     @Override  
  109.     public void run() {  
  110.         System.out.println(Thread.currentThread().getName() + "任务已启动!");  
  111.         new Timer().schedule(new MyTimerTaskA(), 4000);  
  112.     }  
  113.       
  114. }  

任务执行结果:

任务1:


任务2:


任务3:


任务4:


但JDK提供的定时器任务功能有限,不能完成一些复杂的业务,比如:要每年单月的每周星期三的下午5点10分要执行一个任务,JDK则处理不了。不过不要担心,市面上已经有开源的任务调度框架:Quartz,官网:http://www.quartz-scheduler.org/

SpringBoot+Quartz定时任务:Job类对象注入(Demo) 接上文 SpringBoot+Quartz定时框架(Demo) 文章目录1.自定类2.定时任务类中调用测试方法3.控制台报错4.解决办法4.1 编写一个MyAdaptableJobFactory类4.2 设置新的JobFactory 1.自定类 public class UserService { public void testMethod(){ System.out.p... 阅读详情

相关推荐

CANoe VLAN配置的艺术:如何通过脚本自动化实现高效车载网络测试

本文深入探讨了CANoe VLAN配置的自动化实现,通过CAPL脚本与Python工具链的结合,提升车载网络测试效率。重点解析了硬件侧VLAN配置与软件侧VLAN配置的交互机制,并提供了实用的脚本开发示例和调试技巧,帮助工程师快速构建高效的自动化测试方案。

qqq44的博客 616

Java中四种创建定时任务的方式

在开发中,创建定时任务的方式有很多,下面简单介绍四种常见的方式:Runnable,TimerTask,线程池ScheduledExecutorService,Quartz。 1.使用Runnable private static void testRunnable() { final long timeInterval =...

weixin_30352191的博客 746

删除win10电脑U盘使用记录

手工删除:和查看的方法类似,分三步,缺一不可,顺序也不能反! 第一步 设置环境变量,变量名为“devmgr_show_nonpresent_devices”,值为“1”。 第二步 打开设备管理器,勾上“查看”菜单中的“显示隐藏设备”。如果之前已经打开设备管理器,则要关了,重新打开。 第三步 清除“磁盘驱动器”、“存储卷”、“通用串行总线控制器”3个栏目下所有的灰色的图标,注意是所有!右键点击灰色图标,然后选择“卸载”。 成功 :结果USBSTOR 没有了 ...

qq_40544338的博客 2万+

Java中如何实现定时任务?

Java中如何实现定时任务?

水w的博客 9463

ESP32-S3开发环境避坑指南:VS Code+ESP-IDF离线安装全流程(附国内镜像加速)

本文提供了一份详细的ESP32-S3开发环境离线安装指南,重点解决网络依赖问题。通过整合国内镜像加速,手把手教你完成VS Code、ESP-IDF框架、工具链及Python依赖的本地化部署,实现稳定、可重复的开发环境搭建,大幅提升IoT开发效率。

peach的博客 961

Vue中实现word文档渲染、在线编辑、保存

Vue3对word文档进行渲染、编辑、保存。word转成html,html转成word

h18749849699的博客 1328

java定时任务使用

最全整理java中经常使用的定时任务,简单解析以及使用

weixin_38698418的博客 5529

jaka+realsense+aruco+手眼标定(python)

第二次重建了项目的手眼标定部分……有很多第一次记录遗漏的地方,在此补充。

drivenzyw的博客 2122

【定时任务】Java 中 8 种定时任务

1、Timer类是 JDK1.3 专门提供的定时器工具,用来在执行指定任务,需要跟TimerTask一起配合使用工作流程:把 任务TimerTask添加到 任务队列TaskQueue中,由异步无限循环任务队列,如果队列不为空,则去执行任务。Timer案例:执行一个定时任务,每隔1秒执行一次,延迟2秒执行所以,阿里巴巴开发者规范中不建议使用它是JDK1.5 版本引进的定时任务,,设计的初衷是为了解决Timer单线程执行,多个任务之间会互相影响的问题。实现了该接口。

sco5282的博客 1万+

【AI智能体】Coze 数据库从使用到实战操作详解

Coze 数据库使用到实战详解

congge 5913

基于ESP32和OV5640的目标检测系统

本文详细介绍了基于ESP32-S3和OV5640摄像头构建目标检测系统的完整方案。系统采用YOLOv8-Nano轻量级模型,通过INT8量化实现边缘部署,在UXGA分辨率下达到25fps帧率。文章从硬件选型、图像采集优化、模型量化部署、实时推理流水线构建等维度展开,重点解决了内存管理、电源稳定性和异常处理等嵌入式系统关键问题。该方案在资源受限条件下实现了150ms以内的端到端延迟,为物联网视觉应用提供了低成本、低功耗的解决方案,适用于智能家居、工业检测等多个场景。

reset2021的博客 329

Java实现定时任务 Schedule

1、Java定时任务可以借助 java.util.Timer 来实现 import java.util.Calendar; import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class Test { public static void main(String[] args) { //timer1(); timer2(); //tim

pan_junbiao的博客 7593

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Java多种定时任务

文章目录定时任务1 Timer2 ScheduledExecutorService3 Spring Task3.1 基本使用4 执行时间配置4.1 cron表达式5 开/关定时任务 定时任务 1 Timer 这是java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少。 @Test public void test1() throws IOException {

yuexiaqiying的博客 855

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Java 定时任务

单机定时任务的常见解决方案有TimerDelayQueue、Spring Task 和时间轮,其中最常用也是比较推荐使用的是时间轮。另外,这几种单机定时任务解决方案同样可以实现延时任务。Redis 和 MQ 虽然可以实现分布式定时任务,但这两者本身不是专门用来做分布式定时任务的,它们并不提供较为完整和强大的分布式定时任务的功能。而且,两者不太适合执行周期性的定时任务,因为它们只能保证消息被消费一次,而不能保证消息被消费多次。因此,它们更适合执行一次性的延时任务,例如订单取消、红包撤回。

Mr.W的博客 999

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java定时任务_定时任务3种实现方式

java定时任务_定时任务3种实现方式 定时任务在实际的开发中特别常见,比如电商平台 30 分钟后自动取消未支付的订单,以及凌晨的数据汇总和备份等,都需要借助定时任务来实现,那么我们本文就来看一下定时任务最简单的几种实现方式。 Timer Timer 是 JDK 自带的定时任务执行类,无论任何项目都可以直接使用 Timer 来实现定时任务,所以 Timer 的优点就是使用方便,它的实现代码如下: public class MyTimerTask { public static void ma

IT枫斗者的博客 5834

java定时任务

@[TOC]java定时任务 Java定时任务 Java开发过程中经常会遇到使用定时任务的情况,我总结了一下有如下四种方式:Timer、ScheduledExecutorService、SpringTask、Quartz。 一、使用java的Timer 1、Timer new Timer(“testTimer”).schedule(new TimerTask() { @Override public void run() { System.out.println(“TimerTask”); } }, 100

jiuge16的博客 1265

Java实现定时任务

一、普通Java项目实现定时任务 1、Thread方式 创建一个thread在while循环中重复运行,然后通过sleep方式控制每次循环的时间,实现简单的定时任务。 //设置时间间隔为1秒 final long timeInterval = 1000; Runnable runnable = new Runnable() { public void run() { ...

走马川行雪的博客 3525

JAVA定时任务

数据库准备好数据后,开始编写定时任务,注意这里添加的是TriggerTask,目的是循环读取我们在数据库设置好的执行周期,以及执行相关定时任务的内容。​ 在**\xxl-job-2.4.0\xxl-job-admin\target**中执行命令。​ 在**\xxl-job-2.4.0\xxl-job-admin**中编译项目打成jar包。缺点:当添加并执行多个任务时,前面任务的执行用时和异常将影响到后面任务。优点:该类是JDK1.5自带的类,使用简单。Java 自带定时任务类。也是Java自带的类,

weixin_45237135的博客 1459

Java 定时任务JOB

Java 定时任务JOB创建过程 1.创建QuartzManager管理类。 如果需要可根据自身的需要对此类的方法进行重载,以符合自生业务 import org.quartz.CronTrigger; import org.quartz.JobDataMap; import org.quartz.JobDetail; import org.quartz.Scheduler; import java...

qq_35634447的博客 9113

java定时任务schedule

在定时任务中,任务的开始时间和结束时间是可以动态设定的,即用户可以根据自己的需要,在开始时间和结束时间内设置定时任务的运行时间。在 java中,我们可以使用 java. util包中提供的JAVA_HOME类来实现定时任务,即: 1、首先用 javac.get_max_time ()方法获取一个指定时间点的时间戳,将其赋给 schedule类中的时间轮转函数,该函数返回一个指向下一个指定时间点的指针。需要注意的是,`Timer`类是单线程的,如果一个任务执行时间过长,会影响其他任务的执行。

花生日记 5875

linux java定时任务_详解Java定时任务

在我们编程过程中如果需要执行一些简单的定时任务,无须做复杂的控制,我们可以考虑使用JDK中的Timer定时任务来实现。下面LZ就其原理、实例以及Timer缺陷三个方面来解析Java Timer定时器。Java对象序列化ObjectOutputStream和ObjectInputStream示例 http://www.linuxidc.com/Linux/2012-08/68360.htm一、简介在...

weixin_39713578的博客 120

Java定时任务及常见框架

Java定时任务及常见框架

weixin_45734473的博客 3790
上一篇: 深入分析Java ClassLoader原理
下一篇: JAVA反射机制(一)
network_boy
博客等级 码龄12年 9粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值