- 浏览: 226695 次
- 性别:
- 来自: 海南海口
文章分类
- 全部博客 (114)
- java基础 (25)
- 设计模式 (6)
- css (1)
- js (2)
- jquery (5)
- flash as3.0 (3)
- lucene (2)
- tomcat (3)
- uml (0)
- struts2 (7)
- spring (0)
- sql (1)
- ejb3.0 (2)
- jbpm4 (1)
- webservices (1)
- linux (3)
- ajax (1)
- 面试 (1)
- flex (0)
- soa (0)
- oracle解锁 (5)
- 工具 (3)
- ext (3)
- 好的网址 (1)
- junit (2)
- jmx (2)
- encache (1)
- redis (1)
- 网站 (1)
- oracle重要的sql (1)
- web (3)
- hadoop (2)
- DB2 (1)
- ui (1)
- sybase (1)
- ue使用快捷键 (1)
- eclipse优化 (1)
- 前端优化用到的插件 (1)
- zookeeper (1)
- solr (1)
- hibernate (1)
- svn (1)
- resion (1)
- resin (1)
- maven (1)
- mysql (1)
- url (1)
- 通过HttpFileServer设置共享 可以通过http方式访问 (1)
- 非技术 (2)
- 营销 (1)
- ELK (3)
最新评论
-
it_xiaowu:
jqwerty_123 写道我的出同样的问题却是因为引入cxf ...
java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Ma -
繁星水:
实验证明可用,最后补充一下,可以不需要 set Package ...
axis根据wsdl生成java客户端代码 -
qq_16699317:
qq_16699317 写道求一份源代码,感激不尽。。。多谢了 ...
java博客系统 -
qq_16699317:
求一份源代码,感激不尽。。。多谢了
java博客系统 -
jqwerty_123:
我的出同样的问题却是因为引入cxf的时候jcl-over-sl ...
java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Ma
package cn.mytest;
import java.util.ArrayList;
import java.util.HashMap;
/**
* @Description: 线程监控超时的工具类
* @author
* @date 2014-9-18 下午04:47:12
*/
public class ThreadWathcher extends Thread {
private static ThreadWathcher watcher;
/**
* 存放对应的线程跟开始执行的时间
*/
private HashMap<Thread, Long> threadBornTimeCollection;
/**
* 需要被中断的线程
*/
private ArrayList<Thread> toRemoveThreads;
/**
* 超时时间
*/
private long timeOutMills;
/**
* 间隔扫描时间
*/
private long periodMills;
private ThreadWathcher() {
/**
* 设置线程为守护线程 以致主线程停止的时候守护线程也自动终止
*/
this.setDaemon(true);
threadBornTimeCollection = new HashMap<Thread, Long>();
toRemoveThreads = new ArrayList<Thread>();
}
/**
* 配置的超时时间必须是间隔检测时间的倍数+3 比如超时时间是1000则 period应该是503
* @param timeout
* @param period
* @return
*/
public static ThreadWathcher getInstance(long timeout, long period) {
if (watcher == null) {
watcher = new ThreadWathcher();
watcher.timeOutMills = timeout;
watcher.periodMills = period;
}
return watcher;
}
public int register(Thread thread) {
threadBornTimeCollection.put(thread, System.currentTimeMillis());
return threadBornTimeCollection.size();
}
@Override
public void run() {
super.run();
while (true) {// 守护线程
try {
Thread.sleep(periodMills);// 每隔periodMills秒检查一次
for (Thread e : threadBornTimeCollection.keySet()) {// 遍历已经注册过超时处理的线程集合
if (Math.abs(threadBornTimeCollection.get(e)
- System.currentTimeMillis()) > timeOutMills
&& e.isAlive()) {// 超时
toRemoveThreads.add(e);// 添加到超時线程集合中
}
}
for (Thread e : toRemoveThreads) {// 遍历超时线程集合
threadBornTimeCollection.remove(e);// 从超时集合中移除
e.interrupt();// 中断超时线程
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
if (toRemoveThreads.size() > 0) {
System.out.println("清空超时线程集合");
toRemoveThreads.clear();// 清空超时线程集合
}
}
}
}
}
package cn.mytest;
import java.util.ArrayList;
import java.util.HashMap;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Begin here...");
ThreadWathcher wacher = ThreadWathcher.getInstance(1000, 503);
wacher.start();
Thread a = new Thread() {
@Override
public void run() {
super.run();
int n = 0;
try {
System.out.println("A线程执行中-----");
Thread.sleep(1100);
System.out.println("A线程执行完成.....");
/* while (n < 1 && !Thread.interrupted()) {
Thread.sleep(1000);
n++;
System.out.println("In thread a..." + n);
} */
} catch (InterruptedException e) {
// TODO Auto-generated catch block
System.out.println("线程因超时被终止...线程名" + this.getName());
}
}
};
a.setName("a");
wacher.register(a);
a.start();
Thread b = new Thread() {
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
int n = 0;
try {
System.out.println("B线程执行中-----");
Thread.sleep(900);
System.out.println("B线程执行完成.....");
/* while (n < 5 && !Thread.interrupted()) {
Thread.sleep(1000);
n++;
System.out.println("In thread b..." + n);
} */
} catch (InterruptedException e) {
// TODO Auto-generated catch block
System.out.println("线程因超时被终止...线程名" + this.getName());
}
}
};
b.setName("b");
b.start();
wacher.register(b);
Thread c = new Thread() {
public void run() {
// TODO Auto-generated method stub
super.run();
int n = 0;
try {
System.out.println("C线程执行中-----");
Thread.sleep(1200);
System.out.println("C线程执行完成.....");
/* while (n < 12 && !Thread.interrupted()) {
Thread.sleep(1000);
n++;
System.out.println("In thread c..." + n);
} */
} catch (InterruptedException e) {
// TODO Auto-generated catch block
System.out.println("线程因超时被终止...线程名" + this.getName());
}
}
};
c.setName("c");
c.start();
wacher.register(c);
Thread d = new Thread() {
public void run() {
// TODO Auto-generated method stub
super.run();
int n = 0;
try {
System.out.println("D线程执行中-----");
Thread.sleep(500);
System.out.println("D线程执行完成.....");
/* while (n < 15 && !Thread.interrupted()) {
Thread.sleep(1000);
n++;
System.out.println("In thread d..." + n);
} */
} catch (InterruptedException e) {
// TODO Auto-generated catch block
System.out.println("线程因超时被终止...线程名" + this.getName());
}
}
};
d.setName("d");
d.start();
wacher.register(d);
}
}
import java.util.ArrayList;
import java.util.HashMap;
/**
* @Description: 线程监控超时的工具类
* @author
* @date 2014-9-18 下午04:47:12
*/
public class ThreadWathcher extends Thread {
private static ThreadWathcher watcher;
/**
* 存放对应的线程跟开始执行的时间
*/
private HashMap<Thread, Long> threadBornTimeCollection;
/**
* 需要被中断的线程
*/
private ArrayList<Thread> toRemoveThreads;
/**
* 超时时间
*/
private long timeOutMills;
/**
* 间隔扫描时间
*/
private long periodMills;
private ThreadWathcher() {
/**
* 设置线程为守护线程 以致主线程停止的时候守护线程也自动终止
*/
this.setDaemon(true);
threadBornTimeCollection = new HashMap<Thread, Long>();
toRemoveThreads = new ArrayList<Thread>();
}
/**
* 配置的超时时间必须是间隔检测时间的倍数+3 比如超时时间是1000则 period应该是503
* @param timeout
* @param period
* @return
*/
public static ThreadWathcher getInstance(long timeout, long period) {
if (watcher == null) {
watcher = new ThreadWathcher();
watcher.timeOutMills = timeout;
watcher.periodMills = period;
}
return watcher;
}
public int register(Thread thread) {
threadBornTimeCollection.put(thread, System.currentTimeMillis());
return threadBornTimeCollection.size();
}
@Override
public void run() {
super.run();
while (true) {// 守护线程
try {
Thread.sleep(periodMills);// 每隔periodMills秒检查一次
for (Thread e : threadBornTimeCollection.keySet()) {// 遍历已经注册过超时处理的线程集合
if (Math.abs(threadBornTimeCollection.get(e)
- System.currentTimeMillis()) > timeOutMills
&& e.isAlive()) {// 超时
toRemoveThreads.add(e);// 添加到超時线程集合中
}
}
for (Thread e : toRemoveThreads) {// 遍历超时线程集合
threadBornTimeCollection.remove(e);// 从超时集合中移除
e.interrupt();// 中断超时线程
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
if (toRemoveThreads.size() > 0) {
System.out.println("清空超时线程集合");
toRemoveThreads.clear();// 清空超时线程集合
}
}
}
}
}
package cn.mytest;
import java.util.ArrayList;
import java.util.HashMap;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Begin here...");
ThreadWathcher wacher = ThreadWathcher.getInstance(1000, 503);
wacher.start();
Thread a = new Thread() {
@Override
public void run() {
super.run();
int n = 0;
try {
System.out.println("A线程执行中-----");
Thread.sleep(1100);
System.out.println("A线程执行完成.....");
/* while (n < 1 && !Thread.interrupted()) {
Thread.sleep(1000);
n++;
System.out.println("In thread a..." + n);
} */
} catch (InterruptedException e) {
// TODO Auto-generated catch block
System.out.println("线程因超时被终止...线程名" + this.getName());
}
}
};
a.setName("a");
wacher.register(a);
a.start();
Thread b = new Thread() {
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
int n = 0;
try {
System.out.println("B线程执行中-----");
Thread.sleep(900);
System.out.println("B线程执行完成.....");
/* while (n < 5 && !Thread.interrupted()) {
Thread.sleep(1000);
n++;
System.out.println("In thread b..." + n);
} */
} catch (InterruptedException e) {
// TODO Auto-generated catch block
System.out.println("线程因超时被终止...线程名" + this.getName());
}
}
};
b.setName("b");
b.start();
wacher.register(b);
Thread c = new Thread() {
public void run() {
// TODO Auto-generated method stub
super.run();
int n = 0;
try {
System.out.println("C线程执行中-----");
Thread.sleep(1200);
System.out.println("C线程执行完成.....");
/* while (n < 12 && !Thread.interrupted()) {
Thread.sleep(1000);
n++;
System.out.println("In thread c..." + n);
} */
} catch (InterruptedException e) {
// TODO Auto-generated catch block
System.out.println("线程因超时被终止...线程名" + this.getName());
}
}
};
c.setName("c");
c.start();
wacher.register(c);
Thread d = new Thread() {
public void run() {
// TODO Auto-generated method stub
super.run();
int n = 0;
try {
System.out.println("D线程执行中-----");
Thread.sleep(500);
System.out.println("D线程执行完成.....");
/* while (n < 15 && !Thread.interrupted()) {
Thread.sleep(1000);
n++;
System.out.println("In thread d..." + n);
} */
} catch (InterruptedException e) {
// TODO Auto-generated catch block
System.out.println("线程因超时被终止...线程名" + this.getName());
}
}
};
d.setName("d");
d.start();
wacher.register(d);
}
}
发表评论
-
java调用cmd不显示cmd窗口的
2014-07-11 09:34 1080cmd /c start /b fis release 加 ... -
hadoop的入门案例
2013-03-20 17:03 971http://www.cnblogs.com/xia520pi ... -
数据库字段内容的压缩算法
2013-03-08 14:34 1069package cn.ljz; import java. ... -
记录一下消息异步发送的一下框架
2013-02-03 19:02 920disruptor jgroups akka Activ ... -
eclipse中调试jvm内存溢出
2013-01-26 19:45 1314http://www.blogjava.net/rosen/a ... -
jvm退出之前清理工作
2013-01-24 23:25 835try { Runtime.getRu ... -
jvm内存泄露
2012-12-14 14:22 1058查看java内存泄露的办法 1:利用jdk自带的jps命令查看 ... -
Java获取当前运行方法的名称
2012-06-04 14:42 1504方法一:new Exception().getStackTra ... -
jdbc封装事务
2012-02-27 10:10 1140装载从这个网址过来的http://hi.baidu.com/g ... -
hashmap源码解析经典
2011-12-30 22:24 995http://www.java3z.com/cwbwebhom ... -
hashmap的遍历
2011-12-30 22:04 1068for(Iterator ite = map.entrySet ... -
axis根据wsdl生成java客户端代码
2011-12-24 16:30 14368先下载axis jar包:axis-bin-1_4.zip。下 ... -
eclipse设置编译路径
2011-12-24 15:40 1062ljzblog/WebRoot/WEB-INF/classes ... -
java反射判断数组
2011-12-17 19:52 1071if (c.isArray()) { String ca ... -
java方法参数注解
2011-12-03 21:46 16051package cn.ljz.annotation; i ... -
java获取项目路径
2011-08-16 09:19 644this.getClass().getClassLoader( ... -
CardLayout 简单实现Demo
2010-11-10 00:11 2486package cn.ljz.test; import ... -
java反射机制小小总结
2010-08-18 10:40 12761:动态语言就是在程序运行的过程当中,可以改变程序的结果和变量 ... -
java线程小小总结
2010-08-18 09:52 1098线程:简单的来说就是 ... -
java注解小总结
2010-08-18 09:46 18781:从jdk1.5以后就开始出现注解了,主要有@overrid ...
相关推荐
.net C#线程超时的解决方案,使用的时候在被调线程入口调用一下这个方法就可以。更多详细代码见附件 Report.RegisterThread(Report.GetCurrentWin32ThreadID(),Thread.CurrentThread); #region 获取当取线程的...
另外,`java.lang.Thread`类也提供了一种实现线程超时的方法,通过使用`join`方法。`join`可以等待某个线程结束,同时可以设置一个等待时限。 ```java Thread thread = new Thread(() -> { // 需要监控的线程代码 ...
本文将深入探讨如何在多线程环境中使用Libevent进行事件处理,并分享一个基于Libevent的多线程实现案例。 首先,理解Libevent的核心机制至关重要。Libevent提供了一个事件基础结构,它能够将来自不同来源的事件(如...
作用:模仿线程池操作,管理多线程任务,超时,以及完成任务的回调。如果有bug自行处理,服务器挂机一天跑了三千万个线程投递没有出现什么异常。资源作者:。流云思水。资源界面:。资源下载:。
在多线程图片处理中,CURL是关键工具,因为它可以并发地处理多个URL请求,从而提高处理速度。 2. **多线程模拟**:PHP不直接支持多线程,但可以通过pthreads扩展来模拟。pthreads扩展提供了一种在PHP中创建线程、...
V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException 同上面的get功能一样,多了设置超时时间。参数timeout指定超时时间,uint指定时间的单位,在枚举类...
在Java编程中,控制程序执行超时是一项重要的任务,特别是在多线程环境下,我们可能需要确保某个任务不会无限制地运行下去,导致资源耗尽。本文将深入探讨如何使用Java的线程机制来实现程序执行的超时控制,同时也会...
在C#编程中,Windows Forms(WinForm)应用程序经常需要处理多线程操作,以便实现非阻塞用户界面。在标题“WinForm C#多线程等待窗体”中,我们探讨的关键点是如何在进行耗时操作时创建一个等待窗体,让用户知道程序...
在编程领域,多线程并发处理是提升程序执行效率的关键技术之一。Qt库提供了一个强大的模块——qtconcurrent,使得开发者能够轻松地在Qt应用程序中实现多线程并行计算。本文将深入探讨qtconcurrent模块,以及如何在Qt...
在多线程环境中,如果需要确保数据的顺序性,这样的队列可能会用到同步原语如`Monitor`, `Mutex`, 或者`SemaphoreSlim`来控制并发访问,并且可能会结合等待超时处理,以避免线程长时间等待队列的可用性。 博客链接`...
3. 错误处理和异常安全:在多线程环境中,需要特别注意异常的处理,确保在出现错误时能够正确地清理资源,避免悬挂的线程。 4. 线程调度和优先级:可能有功能用于设置线程的优先级,以控制它们的执行顺序,或者设置...
在Java编程中,控制程序执行超时是一项关键任务,特别是在多线程环境下,我们需要确保某个任务不会无限期地运行,导致资源浪费或者阻塞其他重要任务。本篇将深入探讨如何利用Java的线程和定时器(Timer)来实现这个...
这个子程序可能包含了网络请求、数据解析、错误处理等步骤,是多线程访问网页的核心部分。 5. **异步编程**:为了防止主线程被长时间阻塞,多线程访问通常采用异步编程模型。易语言提供了异步调用的机制,如“异步...
6. **线程安全**:如果一个函数或方法在多线程环境中调用时能正确处理数据一致性问题,那么它就是线程安全的。线程安全编程要求开发者对共享资源的访问进行严格控制,避免出现竞态条件。 7. **线程通信**:线程间...
在C#编程中,多线程技术是一种常用的方法,它能让我们在单个应用程序中同时执行多个任务,提高程序的效率和响应性。"等待窗体"是多线程应用中一个重要的概念,通常用于在后台任务执行时提供用户友好的界面反馈。本...
本文将深入探讨Linux环境中的多线程概念、创建与管理线程的方法、线程同步与通信机制,以及多线程编程中可能遇到的问题和解决策略。 一、多线程概念 多线程是指在一个进程中可以同时执行多个独立的代码段,每个代码...
《基于Boost.ASIO的HTTP Server3:多线程、多端口与超时处理的Echo服务器实现》 Boost.ASIO是C++库中的一个强大组件,...通过对多线程、多端口监听和超时处理的理解,我们可以更好地理解和构建高性能的网络应用程序。
如果I/O不是瓶颈,那么多线程的优势将会更加明显,因为CPU可以在等待数据传输的同时处理其他请求,从而提高了整体的吞吐量。 内置的7个demo示例可以提供很好的参考,帮助开发者理解如何使用这个类库。这些示例可能...
在多线程环境下使用`QsqlQuery`变量时,有时会遇到奇怪的问题,即使按照上述方法进行了处理,程序运行一段时间后仍可能出现数据库死锁或者异常关闭的情况。此时,可以尝试通过限制`QsqlQuery`变量的作用域来改善这一...