多线程学习之五超时模式Timer
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的更多相关文章
- 多线程学习之一独木桥模式Single Threaded Execution Pattern
Single Threaded Execution Pattern[独木桥模式] 一:single threaded execution pattern的参与者--->SharedResourc ...
- javascript设计模式学习之五——策略模式
一.策略模式定义: 定义一些列的算法/规则,将它们封装起来,使得它们可以互相替换/组合使用.其目的在于将算法/规则封装起来,将算法/规则的使用与实现分离出来. 通过策略模式,可以减少算法计算过程中大量 ...
- Java多线程学习(吐血超详细总结)
本文主要讲了java中多线程的使用方法.线程同步.线程数据传递.线程状态及相应的一些线程函数用法.概述等. 首先讲一下进程和线程的区别: 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的 ...
- Java多线程学习(转载)
Java多线程学习(转载) 时间:2015-03-14 13:53:14 阅读:137413 评论:4 收藏:3 [点我收藏+] 转载 :http://blog ...
- [转]Java多线程学习(吐血超详细总结)
转自:http://www.mamicode.com/info-detail-517008.html 本文主要讲了Java中多线程的使用方法.线程同步.线程数据传递.线程状态及相应的一些线程函数用法. ...
- Java多线程学习(吐血超详细总结)(转)
林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 写在前面的话:此文只能说是java多线程的一个入门,其实Java里头线程完全可以写一本书了,但 ...
- (转)Java多线程学习(吐血超详细总结)
本文转自:http://blog.csdn.net/evankaka 写在前面的话:此文只能说是java多线程的一个入门,其实Java里头线程完全可以写一本书了,但是如果最基本的你都学掌握好,又怎么能 ...
- Java多线程学习(吐血超具体总结)
林炳文Evankaka原创作品. 转载请注明出处http://blog.csdn.net/evankaka 写在前面的话:此文仅仅能说是java多线程的一个入门.事实上Java里头线程全然能够写一本书 ...
- Java多线程学习(五)线程间通信知识点补充
系列文章传送门: Java多线程学习(二)synchronized关键字(1) Java多线程学习(二)synchronized关键字(2) Java多线程学习(三)volatile关键字 Java多 ...
随机推荐
- jQuery Mobile发展新闻阅读器,适应iphone和android打电话
程序猿是很不赖,你知道. 我们经常新浪,腾讯.雅虎等各大网站看到上述新闻.他们还推出了自己的移动新闻阅读器.今天,我自己用的jQuery Mobile 为了实现这一功能,.图像大小上传限制的大小250 ...
- 【我们都爱Paul Hegarty】斯坦福大学IOS8公开组个人笔记28 ScrollView 幻灯片视图
随着移动设备,iphone屏幕尺寸的限制.超过内容的屏幕大小为scrollview于,通过滑动来获得.scrollview滑动方向可以是也可以是横向垂直,scrollview可以嵌套,例如,纵向滑动s ...
- android从中国天气网获取天气
http://download.csdn.net/detail/sun6223508/8011669 里面的一切..可完全移植 版权声明:本文博主原创文章.博客,未经同意不得转载.
- 华丽的网上突出代码组件CodeMirror
农民之间的代码懒惰性质:愚公绝不能过夜.一劳永逸永远不知疲倦!这是一个代码示例 动态配置,在不同的场景抽象为常见的配置逻辑加,这使得有可能"为一个全球性的代码.代码做搬运工",更糟 ...
- 揭秘上海传智播客平均工资超过7k
其中一位知情人士
大学毕业生人数破700万大关.如何破解"毕业即失业"中国式的大学困境? 2014年全国高校毕业生总数将达到727万人,比被称为"史上最难就业年"的2013年再添 ...
- C语言文件操作函数大全
http://blog.csdn.net/mu0206mu/article/details/18980913 clearerr(清除文件流的错误旗标) 相关函数 feof表头文件 #include&l ...
- 在ABP项目的应用Castle Windsor
Castle Windsor常用介绍以及其在ABP项目的应用介绍 最近在研究ABP项目,有关ABP的介绍请看阳光铭睿 博客,ABP的DI和AOP框架用的是Castle Windsor下面就对Castl ...
- 银联+移动+三星PK微信、余额宝
在不远的将来,你可以扔掉钱包,扔掉信用卡,揣着手机买东西. 银联.移动.三星这些不同的行业大佬,因为这个目标,被一款名叫NFC的支付技术连接在了一起. 这场游戏的参与者众多,一个合纵连横的时代正在到来 ...
- 每天进步一点点-->功能fseek() 使用方法
在阅读代码时,遇到了非常早之前用过的fseek(),非常久没实用了.有点陌生,写出来以便下次查阅. 函数功能是把文件指针指向文件的开头.须要包括头文件stdio.h fseek 函数名: fsee ...
- Find a way (BFS)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2612 BFS搜索 目标地 并记录下来 之后再判断两段路程之和 代码: #include < ...