Java线程关闭的3种方法

 更新时间:2013年10月16日 15:27:41   作者:  
这篇文章介绍了Java线程关闭的3种方法,有需要的朋友可以参考一下

Java线程关闭,总的来说有3种:

1.使用状态位,这个简单,就不多说了:

复制代码 代码如下:

public class Task extends Thread {

private volatile boolean flag= true;

public void stopTask() {

flag = false;

}

@Override

public void run() {

while(flag){

/* do your no-block task */

}

}

}


2.当线程等待某些事件发生而被阻塞,又会发生什么?当然,如果线程被阻塞,它便不能核查共享变量,也就不能停止。这在许多情况下会发生,例如调用 Object.wait()、Thread.sleep等,这里仅举出一些。他们都可能永久的阻塞线程。即使发生超时,在超时期满之前持续等待也是不可行和不适当的,所以,要使用某种机制使得线程更早地退出被阻塞的状态。这个时候你可以使用
复制代码 代码如下:

Thread.interrupt();

public class BlockTask extends Thread {

@Override

public void run() {

try {

while (!Thread.interrupted()) {

/* do your block task*/

}

} catch (Exception e) {

e.printStackTrace();

}

}

}


但是上面的代码或许有些不妥,或许用例子更能把问题说清楚。你怎么知道该代码段会发生阻塞?interrupt()函数到底是什么意思呢?首先说明的是,interrupted()方法只能解决跑出InterruptedException异常的阻塞。而interrupt()并不是关闭阻塞线程,而是解除阻塞。那这里就举出一个关闭线程阻塞的例子:
复制代码 代码如下:

public class BlockTask extends Thread {

@Override

public void run() {

try {

sleep(10000);

} catch (InterruptedException e) {

System.out.println("if yout use interrupt you will see me");

}


}

public static void main(String[] args)throws Exception {

// TODO Auto-generated method stub

BlockTask task = new BlockTask();

task.start();

Thread.sleep(1000);

task.interrupt();


}

}


3.上面说了,interrupt()只能解决InterruptedException的阻塞的线程,那么遇到一些其他的io阻塞怎么处理呢?这个时候java都会提供相应的关闭阻塞的办法。例如,服务器可能需要等待一个请求(request),又或者,一个网络应用程序可能要等待远端主机的响应,这个时候可以使用套接字close()方法
复制代码 代码如下:

public class SocketTask extends Thread {

private volatile ServerSocket server;


public void stopTask(){

try {

if(server!=null){

server.close();

System.out.println("close task successed");

}

} catch (IOException e) {

System.out.println("close task failded");

}

}

@Override

public void run() {

try {

server = new ServerSocket(3333);

} catch (IOException e) {

e.printStackTrace();

}

}

public static void main(String[] args) throws InterruptedException {


SocketTask task = new SocketTask();

task.start();

Thread.sleep(1000);

task.stopTask();

}

}

相关文章

  • Java多线程之同步工具类CountDownLatch

    Java多线程之同步工具类CountDownLatch

    这篇文章主要介绍了Java多线程之同步工具类CountDownLatch,CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程执行完后再执行。例如,应用程序的主线程希望在负责启动框架服务的线程已经启动所有框架服务之后执行,下面一起来学习学习内容吧
    2021-10-10
  • Intellij无法创建java文件解决方案

    Intellij无法创建java文件解决方案

    这篇文章主要介绍了Intellij无法创建java文件解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • java微信公众号开发(搭建本地测试环境)

    java微信公众号开发(搭建本地测试环境)

    这篇文章主要介绍了java微信公众号开发,主要内容有测试公众号与本地测试环境搭建,需要的朋友可以参考下
    2015-12-12
  • Java中csv文件读写超详细分析

    Java中csv文件读写超详细分析

    CSV是一种通用的、相对简单的文件格式,其文件以纯文本形式存储表格数据,下面这篇文章主要给大家介绍了关于Java中csv文件读写分析的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • Java并发编程:volatile关键字详细解析

    Java并发编程:volatile关键字详细解析

    这篇文章主要介绍了Java并发编程:volatile关键字详细解析,对学习volatile关键字有一定的认识,有需要的可以了解一下。
    2016-11-11
  • java遍历机制性能的比较详解

    java遍历机制性能的比较详解

    这篇文章主要给大家介绍了关于java遍历机制性能比较的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • 详解Java中的封装、继承、多态

    详解Java中的封装、继承、多态

    本文主要介绍了Java中的封装、继承、多态的相关知识,具有一定的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • java懒惰评估实现方法

    java懒惰评估实现方法

    这篇文章主要介绍了java懒惰评估如何实现的相关内容及实例,有兴趣的朋友们可以学习参考下。
    2021-05-05
  • 创建一个Java的不可变对象

    创建一个Java的不可变对象

    这篇文章主要介绍了创建一个Java的不可变对象,一个类的对象在通过构造方法创建后如果状态不会再被改变,那么它就是一个不可变(immutable)类。它的所有成员变量的赋值仅在构造方法中完成,不会提供任何 setter 方法供外部类去修改,需要的朋友可以参考下
    2021-11-11
  • Java基本数据类型存储在JVM中的存储位置介绍

    Java基本数据类型存储在JVM中的存储位置介绍

    这篇文章主要介绍了Java基本数据类型存储在JVM中的存储位置,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07

最新评论