终止一个线程的特殊方法
来源:互联网 发布:电脑怎么隐藏软件 编辑:程序博客网 时间:2024/05/21 08:58
很多java的服务器端程序,主处理往往是一个很大的循环,如下:
while(runFlag == true){ operation1; operation2; operation...;}如果我们想要将这个程序停止运行,只要把runFlag设置成false即可。
但是这有一个问题:如果循环处理里的操作很耗费时间的话,那么停止这个程序将耗费很长时间,
在有些情况下,漫长的等待可能会导致一些错误,例如:windows服务。
那怎样才能快速终止这个程序呢? 我们不可能在循环里的每一个处理【operationX】前都加上一个判断,如下:
while(runFlag == true){ operation1; <span style="color:#ff0000;">if(runFlag == false){ break; }</span> operation2; <span style="color:#ff0000;">if(runFlag == false){ break; }</span> operation...;}因为这样会降低程序的运行效率,而且这样的代码也太可笑了。
那怎么办呢?答案就是将这个循环处理放到一个守护线程中去执行,守护线程的特点是当所有非守护线程都终了后,守护线程将自动终了。
这样,我们只需要将所有的处理都放到一个守护线程里,主线程为非守护线程,并且主线程什么也不做,只处于休眠状态就可以了。
如果我们想要终止这个程序,就唤醒主线程,让主线程终了,这样整个程序也就终了了。
大致的结构如下:
private Object lock = new Object();private volatile boolean runFlag = true;public static void main(String[] args) {}public void work(){// 初始化处理(打开文件,数据库连接,网络连接等)init();// 主处理启动(守护线程启动)Thread mainOperation = new Thread(new myOperaion());mainOperation.setDaemon(true);mainOperation.start();// 主线程休眠synchronized (lock) {try {lock.wait();} catch (InterruptedException e) {}}// 终了处理(关闭文件,数据库连接,网络连接等)release();}// 主处理线程class myOperaion implements Runnable {@Overridepublic void run() {while(runFlag){// 消耗大量时间的处理}}}
当然,有一点要注意,那就是关闭文件,数据库连接,网络连接的操作不能放在守护线程里。
0 0
- 终止一个线程的特殊方法
- 终止一个线程的方法
- 终止线程的方法
- 终止线程的方法
- 终止线程的方法
- 终止线程的方法
- 线程终止的方法
- 终止线程的方法
- java终止线程的方法
- Java 终止线程的方法
- Android 终止线程的方法
- 终止线程的典型方法
- C#终止线程的方法
- 有关终止线程的一个问题
- Java终止一个已启动的线程
- 终止线程的三种方法
- 终止线程的三种方法
- JAVA中 终止线程的方法
- 转自coolshell--vim的基本操作
- vb学习之二
- vb学习之三
- vb学习之四
- HDOJ 2046 骨牌铺方格
- 终止一个线程的特殊方法
- vb学习之五
- Android中Service(服务)详解
- vb学习之六
- 基础题
- 智慧北京开发第四天(下)
- codeforces 614A Link/Cut Tree
- Java EE 之 过滤器入门学习与总结(2)
- The Java™ Tutorials — Concurrency :Memory Consistency Errors 内存一致性错误