`
zhongzhao_2008
  • 浏览: 35992 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
最近访客 更多访客>>
社区版块
存档分类
最新评论

java 线程控制

阅读更多
Thread.stop, Thread.suspend, Thread.resume 和Runtime.runFinalizersOnExit 这些终止线程运行的方法已经被废弃,使用它们是极端不安全的!

现在,如果你要安全有效地终止一个线程,应该采用以下这些方法:

1,线程正常执行完毕,正常结束。
也就是让run方法执行完毕,该线程就会正常结束。

2,监视某些条件,结束线程的不间断运行。
然而,常常有些线程是伺服线程。它们需要长时间的运行,只有在外部某些条件满足的情况下,才能关闭这些线程。
通常,它们执行在一个while(true)的死循环中。
如:
@Override
    publicvoid run() {
      
       while(true){
           someWork();
           if(finished){
              break;
           }
           try {
              Thread.sleep(10000);
           } catch (InterruptedException e) {
              /* TODO自动生成 catch 块
               *
               */
              e.printStackTrace();
           }
       }

   }
我们可以在while死循环内,每次循环时,察看外部条件,看看是否需要关闭当前线程。如果是,就break,跳出死循环,或者是抛出异常,跳出死循环,结束线程。

3,捕获InterruptedException 运行时异常,中断当前线程。
有些执行伺服任务的线程,在while(true)这样的死循环内部,是一个阻塞中的方法。此时,就不能采用第二种方法了。因为,当该方法没有返回时,该线程一直处于阻塞当中,根本无法执行其他语句。
此时,就需要调用该线程的interrupt方法,产生一个InterruptedException运行时异常,是阻塞中的那个方法抛出这个异常,从而让我们有机会结束这个线程的执行。
如:
@Override
    publicvoid run() {
while(true){
           try {
// getSendMessages 是BlockingQueue类。它的take方法将会阻塞!
              responseMessage = this.getSendMessages().take();
           } catch (InterruptedException e1) {
   
              thrownew RuntimeException();
//或者break;
           }
           someWork();
      
    }


一个外部的Thread 对象 指向这个线程。 需要结束这个线程时,只需要调用thread对象的interrupt() 方法,就会在
responseMessage = this.getSendMessages().take();
这条语句中产生一个InterruptedException异常,从而结束该线程的阻塞状态,通过抛出异常,或者break跳出死循环,结束这个线程。
分享到:
评论

相关推荐

    java线程控制生成彩色字符串

    对于初学java的新手有帮助哦,应该可以用得着,希望能帮助到大家。

    Java多线程示例之线程控制

    线程控制的实践不仅关乎性能,还直接影响程序的稳定性和可靠性。合理的线程池大小设置可以根据系统的实际硬件配置和任务特性来确定,如处理器核心数、任务执行时间等。而线程通信则需要根据具体业务逻辑设计合适的...

    java通过线程控制程序执行超时(新)

    总结起来,Java通过线程控制程序执行超时是通过结合线程机制、Future/Callable接口以及中断机制实现的。在设计和实现超时控制时,要考虑到基本数据类型和反射的应用,以满足各种复杂的需求。合理地使用这些工具,...

    java线程控制

    多线程控制面板小球的上下左右,键盘上下左右操作线程,线程的改变

    JAVA100例之实例66 实现对线程的控制,中断、挂起、恢复、停止

    线程控制是Java多线程编程中的重要概念,包括中断、挂起、恢复和停止。本实例将深入探讨这些主题,帮助你更好地理解和掌握Java中线程的高级操作。 1. **线程中断**: Java通过`Thread.interrupt()`方法提供线程...

    java线程.pdf

    根据提供的信息,我们可以推断出这份文档主要关注的是Java线程的相关内容。下面将围绕“Java线程”这一主题展开详细的介绍与解释。 ### Java线程基础 在Java语言中,线程是程序执行流的基本单元。一个标准的Java...

    Java线程详解大全

    Java线程是并发编程的核心部分,它允许程序在同一时间执行多个独立的任务,从而提高系统效率和响应速度。本文将深入探讨Java线程的概念、生命周期、实现方式以及相关的同步机制。 首先,理解线程的基本概念至关重要...

    Java线程.ppt

    学习Java线程,理解其创建、状态转换、调度和控制,以及如何处理线程间的互斥和同步,对于开发高效、稳定的并发程序至关重要。通过深入研究这些概念,开发者能够编写出更符合现代计算需求的高质量软件。

    Java线程(第三版)

    书中可能深入讲解了线程同步和并发控制,这是Java线程中的核心概念。同步机制包括`synchronized`关键字、`wait()`, `notify()`, `notifyAll()`方法,以及`java.util.concurrent`包下的高级工具如`Semaphore`, `...

    java线程实例 各种小Demo

    Java线程是多任务编程的重要概念,它允许程序同时执行多个独立的任务,从而提高系统效率和响应速度。在Java中,线程可以分为用户线程和守护线程,前者是程序运行的基础,而后者是在所有用户线程结束时才终止的后台...

    java多线程Demo

    Java线程有10个优先级(MIN_PRIORITY, NORM_PRIORITY, MAX_PRIORITY),默认优先级是NORM_PRIORITY。但是,线程优先级并不保证绝对的执行顺序,操作系统调度策略可能影响实际执行顺序。 7. join()方法: 一个线程...

    java线程深入解析

    Java线程的深入理解和熟练掌握是Java程序员必备的技能,它涉及到程序的性能优化、并发控制和安全性,是开发复杂多线程应用的基础。在实际开发中,合理使用线程同步机制和理解线程调度原理,可以有效避免死锁、活锁等...

    Java线程使用教程

    二、线程控制 1. **线程同步**:为了避免多线程环境下的数据竞争,Java提供了`synchronized`关键字实现锁机制,确保同一时刻只有一个线程访问共享资源。 2. **线程通信**:`wait()`, `notify()` 和 `notifyAll()` ...

    JAVA线程学习(源代码)

    本资源"JAVA线程学习(源代码)"提供了关于Java线程的源代码示例,帮助我们深入理解和实践线程的使用。 首先,我们要理解Java中的线程模型。Java线程由`java.lang.Thread`类或`java.util.concurrent.Executor`框架来...

    java 多线程 控制按钮移动 例子

    在【标题】"java 多线程 控制按钮移动 例子"中,提到的是使用多线程来实现GUI(图形用户界面)中的按钮动态移动,这通常涉及到事件处理和线程同步。 【描述】提到了多线程的概念,它允许并发执行多个指令流,每个...

    java线程文档大全

    Java线程是多任务编程中的核心概念,它允许程序同时执行多个不同的任务,极大地提高了程序的效率和响应性。在Java中,线程是通过Java.lang.Thread类或实现Runnable接口来创建和管理的。这份“java线程文档大全”包含...

    java线程.rar

    Java线程是Java编程语言中的一个核心概念,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,线程是通过类`Thread`或实现`Runnable`接口来创建和管理的。Java线程模型是基于操作系统的原生...

    java线程入门级书籍

    ### Java线程入门知识点详解 #### 一、Java线程基础知识概述 **1.1 什么是线程?** 线程是程序执行流的最小单元,是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。在Java中...

    JAVA单线程多线程

    ### JAVA中的单线程与多线程概念解析 #### 单线程的理解 在Java编程环境中,单线程指的是程序执行过程中只有一个线程在运行。这意味着任何时刻只能执行一个任务,上一个任务完成后才会进行下一个任务。单线程模型...

    java线程与并发编程实践

    Java线程与并发编程实践是Java开发者必备的技能之一,特别是在多核处理器和高并发应用环境中,有效地管理和利用线程能极大地提升程序的性能。本书《java线程与并发实践编程》由Jeff Friesen撰写,2017年2月出版,...

Global site tag (gtag.js) - Google Analytics