timed【超时模式】案例:一个线程提供下载数据,另一个线程执行下载,如果有5秒钟以上,提供下载的线程没有提供数据,下载线程因超时异常,停止下载线程运行。

超时异常类

  1. /**
  2. *
  3. */
  4. package com.benxq.thread6;
  5.  
  6. import java.util.concurrent.ExecutorService;
  7.  
  8. /**
  9. * 超时异常类
  10. * Created by qucf on 2015年10月22日.
  11. */
  12. public class TimeOutException extends InterruptedException{
  13.  
  14. public TimeOutException(String msg) {
  15. super(msg);
  16. }
  17. }

下载数据类

  1. /**
  2. *
  3. */
  4. package com.benxq.thread6;
  5.  
  6. /**
  7. * 下载数据类
  8. * Created by qucf on 2015年10月23日.
  9. */
  10. public class FileData {
  11. //提供下载的数据
  12. private String data;
  13. //有数据下载标示
  14. private boolean flag;
  15. //超时时间
  16. private long timeout;
  17.  
  18. public FileData(String data,boolean flag,long timeout){
  19. super();
  20. this.data=data;
  21. this.flag=flag;
  22. this.timeout=timeout;
  23. }
  24.  
  25. //修改状态,唤醒其他线程
  26. public synchronized void changeStuatus(String data){
  27. this.data=data;
  28. this.flag=true;
  29. notify();
  30. }
  31.  
  32. //下载操作,如果等待1000秒没有数据下载就报超时异常
  33. public synchronized void execu() throws InterruptedException {
  34. //开始执行的时间
  35. long start=System.currentTimeMillis();
  36. int i=0;
  37. System.out.println("FileData.execu()下载开始");
  38. //如果没有数据
  39. while(!flag){
  40. //现在的时间
  41. long now=System.currentTimeMillis();
  42. long reset=timeout-(now-start);
  43. if(reset<=0){
  44. throw new TimeOutException("已经等候"+timeout+"时间了,还没有数据下载");
  45. }
  46. wait(reset);
  47. }
  48. //下载操作
  49. download();
  50. }
  51. //真正下载操作
  52. private void download(){
  53. System.out.println("顺利下载数据===>:"+data);
  54. this.flag=false;
  55. }
  56.  
  57. public String getData() {
  58. return data;
  59. }
  60.  
  61. public void setData(String data) {
  62. this.data = data;
  63. }
  64.  
  65. public boolean isFlag() {
  66. return flag;
  67. }
  68.  
  69. public void setFlag(boolean flag) {
  70. this.flag = flag;
  71. }
  72.  
  73. public long getTimeout() {
  74. return timeout;
  75. }
  76.  
  77. public void setTimeout(long timeout) {
  78. this.timeout = timeout;
  79. }
  80. }

提供数据线程

  1. /**
  2. *
  3. */
  4. package com.benxq.thread6;
  5.  
  6. /**
  7. * 提供数据的线程类
  8. * Created by qucf on 2015年10月23日.
  9. */
  10. public class GiveDataThread implements Runnable{
  11.  
  12. //公共数据
  13. private FileData fileData;
  14.  
  15. public GiveDataThread(FileData fileData) {
  16. super();
  17. this.fileData=fileData;
  18. }
  19.  
  20. @Override
  21. public void run() {
  22.  
  23. //制造数据线程,
  24. for (int i = 0; i < 10; i++) {
  25. fileData.changeStuatus("制造数据"+i);
  26. System.out.println("[提供数据线程池提供数据]=》制造数据"+i);
  27.  
  28. try {
  29. Thread.sleep(1000);
  30. } catch (InterruptedException e) {
  31. // TODO Auto-generated catch block
  32. e.printStackTrace();
  33. }
  34.  
  35. }
  36.  
  37. }
  38.  
  39. }

下载数据线程

  1. /**
  2. *
  3. */
  4. package com.benxq.thread6;
  5.  
  6. /**
  7. * Created by qucf on 2015年10月23日.
  8. */
  9. public class DownThread implements Runnable{
  10. private FileData fileData;
  11. private boolean flag=true;
  12. public DownThread(FileData fileData){
  13. this.fileData=fileData;
  14. }
  15.  
  16. @Override
  17. public void run() {
  18. System.out.println("开始下载。。。。。");
  19. while(flag){
  20. try {
  21. fileData.execu();
  22. } catch ( TimeOutException e) {
  23. e.printStackTrace();
  24. flag=false;
  25. }catch (InterruptedException e) {
  26. System.out.println("下载超时");
  27. }
  28. }
  29. System.out.println("下载线程超时执行完毕");
  30. }
  31.  
  32. }

主线程

  1. /**
  2. *
  3. */
  4. package com.benxq.thread6;
  5.  
  6. /**
  7. * Created by qucf on 2015年10月23日.
  8. */
  9. public class Test {
  10.  
  11. public static void main(String[] args) {
  12.  
  13. FileData file=new FileData("hah", true, 5000);
  14. Thread give=new Thread(new GiveDataThread(file));
  15. Thread down =new Thread(new DownThread(file));
  16.  
  17. give.start();
  18. down.start();
  19. }
  20. }

多线程学习之五超时模式Timer的更多相关文章

  1. 多线程学习之一独木桥模式Single Threaded Execution Pattern

    Single Threaded Execution Pattern[独木桥模式] 一:single threaded execution pattern的参与者--->SharedResourc ...

  2. javascript设计模式学习之五——策略模式

    一.策略模式定义: 定义一些列的算法/规则,将它们封装起来,使得它们可以互相替换/组合使用.其目的在于将算法/规则封装起来,将算法/规则的使用与实现分离出来. 通过策略模式,可以减少算法计算过程中大量 ...

  3. Java多线程学习(吐血超详细总结)

    本文主要讲了java中多线程的使用方法.线程同步.线程数据传递.线程状态及相应的一些线程函数用法.概述等. 首先讲一下进程和线程的区别: 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的 ...

  4. Java多线程学习(转载)

    Java多线程学习(转载) 时间:2015-03-14 13:53:14      阅读:137413      评论:4      收藏:3      [点我收藏+] 转载 :http://blog ...

  5. [转]Java多线程学习(吐血超详细总结)

    转自:http://www.mamicode.com/info-detail-517008.html 本文主要讲了Java中多线程的使用方法.线程同步.线程数据传递.线程状态及相应的一些线程函数用法. ...

  6. Java多线程学习(吐血超详细总结)(转)

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 写在前面的话:此文只能说是java多线程的一个入门,其实Java里头线程完全可以写一本书了,但 ...

  7. (转)Java多线程学习(吐血超详细总结)

    本文转自:http://blog.csdn.net/evankaka 写在前面的话:此文只能说是java多线程的一个入门,其实Java里头线程完全可以写一本书了,但是如果最基本的你都学掌握好,又怎么能 ...

  8. Java多线程学习(吐血超具体总结)

    林炳文Evankaka原创作品. 转载请注明出处http://blog.csdn.net/evankaka 写在前面的话:此文仅仅能说是java多线程的一个入门.事实上Java里头线程全然能够写一本书 ...

  9. Java多线程学习(五)线程间通信知识点补充

    系列文章传送门: Java多线程学习(二)synchronized关键字(1) Java多线程学习(二)synchronized关键字(2) Java多线程学习(三)volatile关键字 Java多 ...

随机推荐

  1. jQuery Mobile发展新闻阅读器,适应iphone和android打电话

    程序猿是很不赖,你知道. 我们经常新浪,腾讯.雅虎等各大网站看到上述新闻.他们还推出了自己的移动新闻阅读器.今天,我自己用的jQuery Mobile 为了实现这一功能,.图像大小上传限制的大小250 ...

  2. 【我们都爱Paul Hegarty】斯坦福大学IOS8公开组个人笔记28 ScrollView 幻灯片视图

    随着移动设备,iphone屏幕尺寸的限制.超过内容的屏幕大小为scrollview于,通过滑动来获得.scrollview滑动方向可以是也可以是横向垂直,scrollview可以嵌套,例如,纵向滑动s ...

  3. android从中国天气网获取天气

    http://download.csdn.net/detail/sun6223508/8011669      里面的一切..可完全移植 版权声明:本文博主原创文章.博客,未经同意不得转载.

  4. 华丽的网上突出代码组件CodeMirror

    农民之间的代码懒惰性质:愚公绝不能过夜.一劳永逸永远不知疲倦!这是一个代码示例 动态配置,在不同的场景抽象为常见的配置逻辑加,这使得有可能"为一个全球性的代码.代码做搬运工",更糟 ...

  5. 揭秘上海传智播客平均工资超过7k 其中一位知情人士

    大学毕业生人数破700万大关.如何破解"毕业即失业"中国式的大学困境? 2014年全国高校毕业生总数将达到727万人,比被称为"史上最难就业年"的2013年再添 ...

  6. C语言文件操作函数大全

    http://blog.csdn.net/mu0206mu/article/details/18980913 clearerr(清除文件流的错误旗标) 相关函数 feof表头文件 #include&l ...

  7. 在ABP项目的应用Castle Windsor

    Castle Windsor常用介绍以及其在ABP项目的应用介绍 最近在研究ABP项目,有关ABP的介绍请看阳光铭睿 博客,ABP的DI和AOP框架用的是Castle Windsor下面就对Castl ...

  8. 银联+移动+三星PK微信、余额宝

    在不远的将来,你可以扔掉钱包,扔掉信用卡,揣着手机买东西. 银联.移动.三星这些不同的行业大佬,因为这个目标,被一款名叫NFC的支付技术连接在了一起. 这场游戏的参与者众多,一个合纵连横的时代正在到来 ...

  9. 每天进步一点点--&gt;功能fseek() 使用方法

    在阅读代码时,遇到了非常早之前用过的fseek(),非常久没实用了.有点陌生,写出来以便下次查阅. 函数功能是把文件指针指向文件的开头.须要包括头文件stdio.h fseek   函数名: fsee ...

  10. Find a way (BFS)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2612 BFS搜索  目标地  并记录下来  之后再判断两段路程之和 代码: #include < ...