什么是调度

任务:就是事情

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

相关的类
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。

最新文章

  1. Javascript生成随机数
  2. BIOS设置之UEFI/Legacy BIOS切换图文详解
  3. ApexSql Log 2014.04.1133破解版&amp;补丁
  4. 数论 - 素数的运用 --- poj 2689 : Prime Distance
  5. 矩阵乘法快速幂 codevs 1732 Fibonacci数列 2
  6. Bat脚本处理ftp超强案例解说
  7. Android4.2.2由于越来越多的物理按键(frameworks)
  8. [折腾纪实]JAVA的坑
  9. [LeetCode]Rotate Image(矩阵旋转)
  10. php文件基本操作与文件管理功能
  11. P1280 尼克的任务
  12. JavaScript高级程序设计 - 阅读笔记
  13. C#设计模式之总结篇
  14. 为DBNavigator的按钮加中文
  15. 简单xmlrpc服务器
  16. BZOJ.1061.[NOI2008]志愿者招募(线性规划 对偶原理 单纯形 / 费用流SPFA)
  17. 老师的blog整理
  18. jquery.datepicker、jquery.validate、jquery.uploadify冲突解决
  19. angular 开发之proxy
  20. 细说show slave status参数详解(最全)【转】

热门文章

  1. HTML CSS布局定位
  2. Windows Server - Tomcat服务器下载、安装、配置环境变量教程
  3. Salesforce LWC学习(一)Salesforce DX配置
  4. css层叠规则(层叠样式表)
  5. 【代码笔记】Web-CSS-CSS组合选择符
  6. 有些CRM settype用事务码COMM_ATTRSET打不开的原因
  7. Spring cloud简单学习总结
  8. java修饰符在含义以及在eclipse下的显示
  9. CentOS 8 安装
  10. python 数据库小测试