11.11-全栈Java笔记:线程状态转换和任务定时调度

来源:互联网 发布:旅游网站数据库设计 编辑:程序博客网 时间:2024/06/06 15:00


线程状态转换

  线程的状态

1)New :创建好线程对象,但没有启动的时候。

一个线程调用start()之后不一定会马上启动,此时进入就绪状态,等待得到资源。

2)就绪线程序通过Scheduler(调度程序)去确定是否运行。

3)Runing---dead:运行结束(非双向,为单向箭头)。

4)Runing---就绪:暂停(除了没有CPU,具备运行的所有条件)。

5)Runing-otherwise(阻塞):因程序原因:调用sleep或join之后,线程被阻塞。这时不具备运行的条件,此时线程进入阻塞池。sleep或join条件解除之后直接进入Runnable不进入running。

6)Lock pool:锁池状态。每个对象都有自己的锁池,锁池里放置了想获得对象锁的线程。

7)等待状态(wait pool):比如一个线程调用了某个对象的wait()方法,就进入了该对象的wait pool, 正在等待其它线程调用这个对象的notify()或者notifyAll()(这两个方法同样是继承自Object类)方法来唤醒它。

任务定时调度

通过TimerTimetask,我们可以实现定时启动某个线程。

1)java.util.Timer

在这种实现方式中,Timer类作用是类似闹钟的功能,也就是定时或者每隔一定时间触发一次线程。其实,Timer类本身实现的就是一个线程,只是这个线程是用来实现调用其它线程的。

2)java.util.TimerTask任务类

TimerTask类是一个抽象类,该类实现了Runnable接口,所以该类具备多线程的能力。

在这种实现方式中,通过继承TimerTask使该类获得多线程的能力,将需要多线程执行的代码书写在run方法内部,然后通过Timer类启动线程的执行。 

【示例1java.util.Timer的使用

public class TestTimer {

    public static void main(String[] args) {

       Timer t1 = new Timer();

       MyTask task1 = new MyTask();

//     t1.schedule(task1,3000);  //3秒后执行

       t1.schedule(task1,5000,1000);  //5秒以后每隔1秒执行一次!

      

      

//     GregorianCalendar   calendar1 = new GregorianCalendar(2010,0,5,14,36,57);  //注意月份是0-11

//     t1.schedule(task1,calendar1.getTime());  //指定时间定时执行

      

    }

}

 

class MyTask extends    TimerTask {

    public void run() {

       for(int i=0;i<100;i++){

           System.out.println("任务1:"+i);

       }

    }

}

在实际使用时,一个Timer可以启动任意多个TimerTask实现的线程,但是多个线程之间会存在阻塞。所以如果多个线程之间如果需要完全独立运行的话,最好还是一个Timer启动一个TimerTask实现。

老鸟建议

实际开发中,我们可以使用开源框架quanz,更加方便的实现任务定时调度。实际上,quanz底层原理就是我们这里介绍的内容。




「全栈Java笔记」是一部能帮大家从零到一成长为全栈Java工程师系列笔记。笔者江湖人称 Mr. G,10年Java研发经验,曾在神州数码、航天院某所研发中心从事软件设计及研发工作,从小白逐渐做到工程师、高级工程师、架构师。精通Java平台软件开发,精通JAVAEE,熟悉各种流行开发框架。


 笔记包含从浅入深的六大部分:

 A-Java入门阶段

 B-数据库从入门到精通

 C-手刃移动前端和Web前端

 D-J2EE从了解到实战

 E-Java高级框架精解

 F-Linux和Hadoop 


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 八个月小孩粘人怎么办 一岁的宝宝粘人怎么办 六个月宝宝粘人爱哭怎么办 摔伤结巴里面灌脓了怎么办 两周半的宝宝说话结巴怎么办 孩子两周说话结巴怎么办 名字取了生僻字考大学怎么办 淘宝客服一直不说话怎么办 淘宝客服不说话也不发货怎么办 面对不说话的客人怎么办? 卖家客服不回复怎么办 2周小孩说话结巴怎么办 微信群里只领红包不说话的人怎么办 躺在微信不说话的客户怎么办 9岁儿童说话结巴怎么办 5岁儿童说话结巴怎么办 京东客服不说话怎么办 两岁宝宝说话有点结巴怎么办 孩子不敢跟外人说话怎么办? 孩子不爱跟外人说话怎么办 别人说我不说话怎么办 衣服屁股那块变亮怎么办 小孩家里说话外面不说话怎么办 2个月小宝宝便秘怎么办 3个月小宝宝便秘怎么办 微信客户不说话怎么办 一岁半宝宝便秘肛裂怎么办 网恋现在都不说话了怎么办 宝宝便秘四天了怎么办 月子里小孩吐奶怎么办 月子里的小孩吐奶怎么办 婴儿吃多了吐奶怎么办 20个月孩子便秘怎么办 一岁宝宝肛裂怎么办 婴儿吃饱了吐奶怎么办 23天新生儿吐奶怎么办 婴儿吐奶舌苔白怎么办 宝宝吐奶酸臭味怎么办? 1周岁吐奶有酸味怎么办 十多天的宝宝吐奶怎么办 未满月婴儿吐奶怎么办