什么是调度

任务:就是事情

调度:在不同的时间点或者在指定的时间点或者间隔多长时间去运行这个任务。就是生活中的闹钟

相关的类
Timer 类:位于 java.util 包中

案例

实现时间的动态刷新

任务类

 import java.util.Date;
import java.util.TimerTask;
/**
* 任务
* @author Administrator
*
*/
public class Clock extends TimerTask{
long time=1000;//1秒
@Override
public void run() {
Date date=new Date(System.currentTimeMillis()+time);
System.out.println(date.toLocaleString());
} }

创建测试类调度

 import java.util.Date;
import java.util.Timer;
import java.util.TimerTask; public class TestTimer {
public static void main(String[] args) {
//(1)创建Timer的对象
Timer t=new Timer();
//(2)调用schedule()方法去执行任务 schedule工作计划
//创建任务类的对象
TimerTask task=new Clock();
//要执行的任务,第二个参数是任务的执行开始时间是当前时间1秒后 ,第三个参数是每隔1秒执行一次
t.schedule(task, new Date(System.currentTimeMillis()+1000), 1000); }
}

运行结果

--------------------------------------------------------------------------------------------

ThreadLocal

ThreadLocal 直译为“本地线程”,其实它就是一容器用于存放线程的局部变量

作用:为解决多线程程序的并发问题,把原来线程共享的资源变为每个线程都有一个副本,每个线程单独操作自己的副本

案例

实现一个序列号的生成器程序

先创建序列接口

public interface Sequence {
public int getNumber();//每次调用时获得一个数,下次调用时,这个数自增
}

使用ThreadLocal实现序列接口

 public class SequenceImple2 implements Sequence {
private static ThreadLocal<Integer> numberContainer=new ThreadLocal<Integer>(){
protected Integer initialValue() { //初始化值为0
return 0;
}
}; @Override
public int getNumber() {
numberContainer.set(numberContainer.get()+1); //从本地线程容器中取值后+1,再返回结果
return numberContainer.get();
} }

创建线程类来操作实现序列接口的类

 public class MyThread implements Runnable {
private Sequence seq;
public MyThread(Sequence seq) {
this.seq=seq;
}
@Override
public void run() {
for(int i=0;i<3;i++){
System.out.println(Thread.currentThread().getName()+"-->number"+seq.getNumber());
} }
}

创建测试类

 public class Test {
public static void main(String[] args) {
//(1)创建共享资源的对象
Sequence seq=new SequenceImple2();
//(2)创建线程类的对象
MyThread m=new MyThread(seq); //创建三个代理,并启动线程
new Thread(m,"A").start();
new Thread(m,"B").start();
new Thread(m,"C").start();
}
}

运行结果

----------------------------------------------------------------------------

ThreadLocal 的使用场景为:用来解决数据库连接、Session管理等

当你在一个类中使用 static 成员变量时,一定要问自己这个 static 成员变量需要考虑“线程安全吗?”

(也就是说多个线程需要自己独立的 static 成员变量吗?)如果需要那就需要使用 ThreadLocal。

TaskTimer的更多相关文章

  1. 定时器tasktimer

    1.web.xml中配置 <servlet> <servlet-name>TaskTimer</servlet-name> <servlet-class> ...

  2. C#邮件接收系统核心代码(接收POP3邮件IMAP邮件)

    /* * Created by SharpDevelop. * User: Administrator * Date: 2013/11/18 * Time: 20:55 * * To change t ...

  3. java中基于TaskEngine类封装实现定时任务

    主要包括如下几个类: 文章标题:java中基于TaskEngine类封装实现定时任务 文章地址: http://blog.csdn.net/5iasp/article/details/10950529 ...

  4. 定时器Timer的使用

    概述 Timer类的主要作用是设置计划任务,但封装任务的类却是TimerTask类.执行计划任务的代码要放入TimerTask的子类中,因为TimerTask是一个抽象类. 方法schedule(ta ...

  5. quartz 2.1.6使用方法

    /** * @Description: * * @Title: QuartzManager.java * @Package com.joyce.quartz * @Copyright: Copyrig ...

  6. Java 中的定时任务(一)

    定时任务简单来说就是在指定时间,指定的频率来执行一个方法,而在 Java 中我们又该如何实现呢? 想来主要有 3 种方式,最原始的方式肯定是开启一个线程,让它睡一会跑一次睡一会跑一次这也就达到了定频率 ...

  7. java定时器学习

    一.这个是利用jdk自带的Thread类的sleep方法实现定时执行任务. package tasker; import java.util.Date; public class tasker01 e ...

  8. C# Winform 小技巧(Datagridview某一列按状态显示不同图片)

    步骤: 一.导入状态图片到项目中: 二.在窗体中声明一个图片数组,并在窗体的OnLoad事件中加入图片资源: /// <summary> /// 存储状态图片序列,避免同一状态对图片重复读 ...

  9. Handler: Service中使用Toast

    Handler 的使用在 android App 开发中用的颇多,它的作用也很大,使用 Handler 一般也会使用到多线程,相信大家对 Handler 不会陌生,在这里,重点说一下 android ...

随机推荐

  1. Blend 硬货 绑定

    原文:Blend 硬货 绑定 开始讲一点 硬技能 怎么用Blend实现绑定 效果 详细说一下绑定 1)default 2)OneTime 3) One Way 4)TwoWay 5) OneWayto ...

  2. JavaScaript学习笔记第(一)

    js由三部分组成,分别是ECMAScript.DOM.BOM 其中ECMAScript规定了js的语法 js是一门解释型语言.脚本语言.动态类型语言.基于对象语言 书写js代码和CSS一样,有三个书写 ...

  3. C#配置文件configSections详解

    一.问题需求: 在项目中经常遇到需要写配置文件地方,目的就是不想在程序中关于一些信息写死,发布的时候只需要修改一下配置文件就可以,不需要每次都修改程序,如项目名称.数据库连接字符串.IP端口之类 的: ...

  4. List和模型学完后的练习

    概述:控制台程序,sqlserver数据库,库D1,表T1. 学生信息表: 表结构: 其中id自动编号. 主程序先完成框架,循环录入选项进行操作: namespace ConsoleApplicati ...

  5. MySQL中的存储过程、游标和存储函数

    MySQL中的存储过程首先来看两个问题: 1.什么是存储过程? 存储过程(Stored Procedure)是在数据库系统中,一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存 ...

  6. 【开发笔记】- Grails框架定义一个不是数据库字段得属性

    实体类 class Book{ String name String author // myfiled 我不想他在数据库中生成book表的字段 String myfield } 添加声明 class ...

  7. centos7设置时间

    1.查看时间时区 date 2.修改时区 timedatectl set-timezone Asia/Shanghai # 设置系统时区为上海 3.安装ntp 联网校准时间 yum install n ...

  8. 递归删除文件和文件夹(bat)

    递归删除当前目录下指定的文件和文件夹,使用了通配符,Win10下亲测有效,仅供参考!  Batch Code  123456   @echo off echo del file... for /r % ...

  9. 《2017年-2018年中国MES软件及服务市场研究报告》正式发布!

    <2017年-2018年中国MES软件及服务市场研究报告>由e-works Research研究编写,报告深度分析了2017年及2018年中国MES市场发展状况,从市场规模.市场特点.需求 ...

  10. 记MacOS抹盘后--使用U盘安装MacOS实录

    背景 纯属一时手贱,本想重装系统,结果直接把磁盘抹了,然后联网安装死活安不上.但这里仍然附上联网安装方法: 按键 描述 ⌘+R 重新安装您的 Mac 上装有的最新 macOS(建议操作). Optio ...