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

超时异常类

/**
*
*/
package com.benxq.thread6; import java.util.concurrent.ExecutorService; /**
* 超时异常类
* Created by qucf on 2015年10月22日.
*/
public class TimeOutException extends InterruptedException{ public TimeOutException(String msg) {
super(msg);
}
}

下载数据类

/**
*
*/
package com.benxq.thread6; /**
* 下载数据类
* Created by qucf on 2015年10月23日.
*/
public class FileData {
//提供下载的数据
private String data;
//有数据下载标示
private boolean flag;
//超时时间
private long timeout; public FileData(String data,boolean flag,long timeout){
super();
this.data=data;
this.flag=flag;
this.timeout=timeout;
} //修改状态,唤醒其他线程
public synchronized void changeStuatus(String data){
this.data=data;
this.flag=true;
notify();
} //下载操作,如果等待1000秒没有数据下载就报超时异常
public synchronized void execu() throws InterruptedException {
//开始执行的时间
long start=System.currentTimeMillis();
int i=0;
System.out.println("FileData.execu()下载开始");
//如果没有数据
while(!flag){
//现在的时间
long now=System.currentTimeMillis();
long reset=timeout-(now-start);
if(reset<=0){
throw new TimeOutException("已经等候"+timeout+"时间了,还没有数据下载");
}
wait(reset);
}
//下载操作
download();
}
//真正下载操作
private void download(){
System.out.println("顺利下载数据===>:"+data);
this.flag=false;
} public String getData() {
return data;
} public void setData(String data) {
this.data = data;
} public boolean isFlag() {
return flag;
} public void setFlag(boolean flag) {
this.flag = flag;
} public long getTimeout() {
return timeout;
} public void setTimeout(long timeout) {
this.timeout = timeout;
}
}

提供数据线程

/**
*
*/
package com.benxq.thread6; /**
* 提供数据的线程类
* Created by qucf on 2015年10月23日.
*/
public class GiveDataThread implements Runnable{ //公共数据
private FileData fileData; public GiveDataThread(FileData fileData) {
super();
this.fileData=fileData;
} @Override
public void run() { //制造数据线程,
for (int i = 0; i < 10; i++) {
fileData.changeStuatus("制造数据"+i);
System.out.println("[提供数据线程池提供数据]=》制造数据"+i); try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } } }

下载数据线程

/**
*
*/
package com.benxq.thread6; /**
* Created by qucf on 2015年10月23日.
*/
public class DownThread implements Runnable{
private FileData fileData;
private boolean flag=true;
public DownThread(FileData fileData){
this.fileData=fileData;
} @Override
public void run() {
System.out.println("开始下载。。。。。");
while(flag){
try {
fileData.execu();
} catch ( TimeOutException e) {
e.printStackTrace();
flag=false;
}catch (InterruptedException e) {
System.out.println("下载超时");
}
}
System.out.println("下载线程超时执行完毕");
} }

主线程

/**
*
*/
package com.benxq.thread6; /**
* Created by qucf on 2015年10月23日.
*/
public class Test { public static void main(String[] args) { FileData file=new FileData("hah", true, 5000);
Thread give=new Thread(new GiveDataThread(file));
Thread down =new Thread(new DownThread(file)); give.start();
down.start();
}
}

多线程学习之五超时模式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. hdoj 2183 奇数阶魔方(II) 【模拟】+【法】

    比赛的时候花了一个多小时,以做不做 分析:可观察:中间是(n*n+1)/2, 中间的上面是n*n,以下是1, 左边是n,右面是(n*n+1)-n,并且正对角线是最左上对到最右下端添加(+1).另外一条 ...

  2. Swift学习 --- 2.3和字符串

    1.创建一个空字符串,并通过推理的字符串是空的 <span style="font-size:18px;"> var str = "" var st ...

  3. 为了圣像画系统V1.0Beta版(javascript)-GIS520社区

    地图标绘系统V1.0測试版 (界面比較难看,之后再统一美化!)   演示地址:http://www.gis520.com/gis/plotdemo/index.html 查看可在菜单Map--> ...

  4. 通过gradle运行测试脚本(转)

    练习一:HelloWorld 创建项目,源代码在src/main/java,测试源代码在src/test/java build.gradle的脚本: apply plugin: 'java' depe ...

  5. ASP.NET程序读取二代身份证(附源码)

    原文:ASP.NET程序读取二代身份证(附源码) 一般来说winform应用程序解决这个问题起来时很容易的,web应用程序就麻烦一点了. 这里我说说我的解决思路: 一.你必要有联机型居民身份证阅读器一 ...

  6. Think in Java(一):Java基础

    一. OOP的特点 (1) 万物皆为对象; (2) 程序是对象的集合,他们通过发送信息来告诉彼此所要做的; (3) 每一个对象都有自己的由其它对象所构成的存储; (4) 每一个对象都拥有它的类型; ( ...

  7. myeclipse解决JSP文件script调整背景颜色

    1进口MyEclipse主题后,打开jsp要么html文件,jsvascript部分原因遭遇了一层白色的.闪避这个时候.症状,如下面: watermark/2/text/aHR0cDovL2Jsb2c ...

  8. Testin一日游实验室发布的行级APP质量报告:在那里拍携程双赢

    Testin实验室公布国庆出行旅途类APP质量报告:携程力压去哪儿夺冠 2014/09/28 · Testin · 实验室报告 一年一度的十一黄金周即将临近,旅游软件成为每外出行人手机必装软件.为此全 ...

  9. 由于抽签HT For Web ComboBox下拉框组件

    传统HTML5的下拉框select仅仅能实现简单的文字下拉列表,而HT for Web通用组件中ComboBox不仅可以实现传统HTML5下拉框效果,并且可以在文本框和下拉列表中加入自己定义的小图标, ...

  10. 设计模式Template Method模式(Template Method)摘录

    23种子GOF设计模式一般分为三类:创建模式.结构模型.行为模式. 创建模式抽象的实例.怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化托付给还 ...