3种方法关闭Java线程 - 百易城

gojava 2021-12-15 原文


3种方法关闭Java线程

      广州疯狂java专注于java培训,通过科学标准的java培训,让零基础学员快速成长为高端java开发工程师,迅速成为企业最急需技术型人才,成功进入IT名企。

  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()并不是关闭阻塞线程,而是解除阻塞。那这里就举出一个关闭线程阻塞的例子:

  1 public class BlockTask extends Thread {

  2 @Override

  3 public void run() {

  4 try {

  5 sleep(10000);

  6 } catch (InterruptedException e) {

  7 System.out.println(“if yout use interrupt you will see me”);

  8 }

  9

  10 }

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

  12 // TODO Auto-generated method stub

  13 BlockTask task = new BlockTask();

  14 task.start();

  15 Thread.sleep(1000);

  16 task.interrupt();

  17

  18 }

  19 }

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

  1 public class SocketTask extends Thread {

  2 private volatile ServerSocket server;

  3

  4 public void stopTask(){

  5 try {

  6 if(server!=null){

  7 server.close();

  8 System.out.println(“close task successed”);

  9 }

  10 } catch (IOException e) {

  11 System.out.println(“close task failded”);

  12 }

  13 }

  14 @Override

  15 public void run() {

  16 try {

  17 server = new ServerSocket(3333);

  18 } catch (IOException e) {

  19 e.printStackTrace();

  20 }

  21 }

  22

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

  24

  25 SocketTask task = new SocketTask();

  26 task.start();

  27 Thread.sleep(1000);

  28 task.stopTask();

  29 }

  30

  31 }

  疯狂Java培训紧跟最前沿的技术潮流,采用的都是企业最真实的项目开发,培养学生的实践动手能力。技术在不断更新换代,在疯狂软件学院你能学到最前沿的Java技术,疯狂Java培训主要培养的是Java专业人才。学员毕业之后的代码量至少达到项目经理的水平。疯狂软件学院有完善的就业服务机制,学员毕业时,可以享受免费终身推荐就业服务。根据学员的特点和企业的要求,为学员推荐最合适的岗位。

 

发表于
2013-10-16 15:16 
百易城 
阅读(605
评论(0
编辑 
收藏 
举报

 

版权声明:本文为gojava原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/gojava/p/3372314.html

3种方法关闭Java线程 - 百易城的更多相关文章

  1. Core + Vue 后台管理基础框架4——前端授权

    1、前言   上篇,我们讲了后端的授权。与后端不同,前端主要是通过功能入口如菜单、按钮的显隐来控制授权的。具体 […]...

  2. 谁是互联网新一代财富领袖? – 14的路

    谁是互联网新一代财富领袖? 陈士骏   在美国,杨致远带着他的Yahoo用两年不到的时间挤入科技新贵的行列,迅 […]...

  3. 微信小程序开发技巧及填坑记录 – 程序猿–少停

    微信小程序开发技巧及填坑记录 以下是自己在开发过程中遇到的坑和小技巧,记录以下: 1.出现了 page[pag […]...

  4. Microsoft SQL Server Management Studio Express – simhare

    Microsoft SQL Server Management Studio Express Microsof […]...

  5. 互联网行业性能测试实施全过程指南 – 狂师

    互联网行业性能测试实施全过程指南 2019-11-20 14:30  狂师  阅读(820)  评论(0)  […]...

  6. python+fiddler下载vip视频 && ts视频可合并

    如果你只想在线看视频可以去看这篇博客:python实现通过指定浏览器免费观看vip视频  先看一下我们程序运行 […]...

  7. python保护变量(_),私有变量(__),私有方法, – 星空6

    python保护变量(_),私有变量(__),私有方法,  上图为常规代码   私有变量(__),私有方法;只 […]...

  8. CentOS6-Linux内核编译 详细步骤 背景 Win10用VMwareWorkstation搭的虚拟机 […]...

随机推荐

  1. 关于STM32不能下载的总结

    404...

  2. 通俗讲解什么是神经网络

    我一直搞不懂神经网络是怎么工作的以及为什么cnn要卷积池化就能达到图像分割的目的 直到我看到了深度之眼的课程 […]...

  3. Internet地址结构

    .blockquote { padding: 5px; background-color: rgba(239, […]...

  4. 转移到新的个人独立博客。

    一直觉得个人独立博客很赞,所以自己也搞了个独立博客,自己管理网站的感觉确实很赞。 博客地址:alphaWay. […]...

  5. MacOS 安装MysqlDB 问题解决方案( 解决 IndexError: string index out of range) – 我是某某某是我

    MacOS 安装MysqlDB 问题解决方案( 解决 IndexError: string index out […]...

  6. MySql基本概念(一)

    MySQL基本概念   一、 数据库系统概述:          mysql是数据库系统的一种,下面是所有数据 […]...

  7. Amaze UI Mobile first 的前端框架

    http://amazeui.org/1.x/getting-started/  ...

  8. Linux中Workqueue机制分析[转]

    http://bbs.ednchina.com/BLOG_ARTICLE_133253.HTM 走入Linux […]...

展开目录

目录导航