文档章节

身为JAVA工作者必须了解的实战知识(六)

 叶荷
发布于 2017/08/28 20:19
字数 1564
阅读 2
收藏 0

Java没有提供任何机制来安全地(抢占式方法)终止线程,虽然Thread.stop和suspend等方法提供了这样的机制,但是由于存在着一些严重的缺陷,因此应该避免使用。但它提供了中断Interruption机制,这是一种协作机制,能够使一个线程终止另一个线程的当前工作。

一、任务取消

取消操作的原因:

. 用户请求取消

. 有时间限制的操作

. 应用程序事件

. 错误

. 关闭

结束任务的四种方式:

1. run方法执行结束

2. 使用请求关闭标记(例如boolean开关)

3. 使用中断机制

4. 使用Future退出方法

2. 使用请求关闭标记

当执行到并满足条件是使用return退出run方法

变量需要volatile确保变量多线程环境下的可见性。

-例子待填充,没有执行到判断条件就不会退出,所以不是立即退出的办法。

3. 使用中断机制

优点是相对“请求关闭标记”相应更快一些,但也不是立即关闭线程。

void        interrupt()       中断线程。

boolean   interrupted()   测试当前线程是否已经中断。

boolean   isInterrupted() 测试线程是否已经中断。

InterruptedException异常

程序应该对线程中断作出恰当的响应。

[java]view plaincopy

print?

//  1

Thread thread =newThread("interrupt test") {

publicvoidrun() {

for(;;) {

doXXX();

if(Thread.interrupted()) {

break;

}

}

}

};

thread.start();

// 2

Thread thread =newThread("interrupt test") {

publicvoidrun() {

for(;;) {

try{

doXXX();

}catch(InterruptedException e) {

break;

}catch(Exception e) {

// handle Exception

}

}

}

};

thread.start();

//  3

publicvoidfoo()throwsInterruptedException {

if(Thread.interrupted()) {

thrownewInterruptedException();

}

}

4. 使用Future退出方法

boolean cancel(boolean mayInterruptIfRunning)

试图取消对此任务的执行。

boolean isCancelled()

如果在任务正常完成前将其取消,则返回 true。

*. 处理不可中断的阻塞

*. 采用newTaskFor来封装费标准的取消

二、停止基于线程的服务

之前的任务取消,主要是涉及如何关闭单个线程并且都是由创建单个线程的对象来进行关闭操作,但是如果线程不是由对象自己而是由线程池统一创建的线程该如何处理呢?

1. 使用线程的对象进行关闭 - 当前即使不在对象中创建线程而由线程池创建,这个对象依然可以关闭线程,这点一定要相信程序员的破坏能力,只是使用第2种方式更符合封装原则。

2. 使用线程池统一管理 - 如果是使用ExecutorService创建就交由其进行关闭操作。

2. 使用线程池统一管理(关闭ExecutorService)

void shutdown()

启动一次顺序关闭,执行以前提交的任务,但不接受新任务。如果已经关闭,则调用没有其他作用。

-- 安全关闭方式。

List shutdownNow()

试图停止所有正在执行的活动任务,暂停处理正在等待的任务,并返回等待执行的任务列表。

无法保证能够停止正在处理的活动执行任务,但是会尽力尝试。例如,通过 Thread.interrupt() 来取消典型的实现,所以任何任务无法响应中断都可能永远无法终止。

-- shutdownNow方法的局限性,强制关闭方式。

boolean isShutdown()

boolean isShutdown()如果此执行程序已关闭,则返回 true。

3. “毒丸”对象

只有在生产者消费者的数量都已知的情况下,才可以使用“毒丸”对象。

三、处理非正常的线程终止

Thread.UncaughtExceptionHandler全局的捕获的异常处理,通常在应用中用于异常的统计,收集到这些统计后可以对应用进行异常修复。

四、JVM关闭

1. 关闭钩子

Runtime.getRuntime().addShutdownHook(new Thread()) ;

void addShutdownHook(Thread hook)

注册新的虚拟机来关闭钩子。

2. 守护线程

希望创建一个线程来执行一些辅助工作,但又不希望这个线程阻碍JVM的关闭,可以使用守护线程。

3. 终结器

避免使用终结器finalize

以上就是我推荐给Java开发者们的一面试经典知识。但是这些知识里面并没有太多Java全栈、Java晋阶、JAVA架构之类的题,不是我不推荐,而是希望大家更多的从基本功做起,打好基础,太多复杂的内容一会儿也说不明白。

好了同学们,我能介绍的也都全部介绍完给你们了,如果下获得更多JAVA教学资源,可以选择来我们这里共同交流,群:240448376,很多大神在这里切磋学习,不懂可以直接问,晚上还有大牛免费直播教学。

注:加群要求

1、具有一定工作经验的,面对目前流行的技术不知从何下手,需要突破技术瓶颈的可以加,有些应届生和实习生也可以加。

2、在公司待久了,过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的可以加。

3、如果没有工作经验,但基础非常扎实,对java工作机制,常用设计思想,常用java开发框架掌握熟练的,可以加。

4、觉得自己很牛B,一般需求都能搞定。但是所学的知识点没有系统化,很难在技术领域继续突破的可以加。

5.阿里Java高级大牛直播讲解知识点,分享知识,多年工作经验的梳理和总结,带着大家全面、科学地建立自己的技术体系和技术认知!

PS:现在主要讲解的内容是(反射原理枚举原理与应用注解原理常用设计模式、正规表达式高级应用、JAVA操作Office原理详解JAVA图像处理技术,等多个知识点的详解和实战)

6.小号或者小白之类加群一律不给过,谢谢。

最后,每一位读到这里的网友,感谢你们能耐心地看完。觉得对你有帮助可以给个喜欢!希望在成为一名更优秀的Java程序员的道路上,我们可以一起学习、一起进步

© 著作权归作者所有

共有 人打赏支持
粉丝 0
博文 24
码字总数 41519
作品 0
fbf的书单,欢迎分享,欢迎更新

本人看过的以下书值得推荐的,列出来的就是值得推荐的 这个颜色是一般推荐 这个颜色是强烈推荐 这个颜色是神作,收藏吧 物联网:生产力的变革 李虹著 开拓视野,一般 源码中国:全球IT外包新原...

fbf
2015/03/16
0
0
Python爱好者要明确的未来方向

了解Python是什么? Python 这门语言它是面向对象编程语言,有封装强大的类库,Python目前已经超过了Java成为人们最喜欢的编程语言。相比Java,Python更加的容易理解、免费开源的代码、Pytho...

糖宝lsh
09/20
0
0
BAT等大厂Android面试书单和知识点清单

java是Android开发的基础,在BAT的初面中,会涉及到比较多的java基础知识,所以比较重要,下面我介绍的书籍内容是由浅到深。 1.Thinking in java:这本书被称为Java的三大圣经之一,虽然书比...

android自学
07/25
0
0
Java培训实战教程之Java基础知识精华部分(一)(二)(三)

Java培训实战教程之Java基础知识精华部分(一)_java概述 =============================================================================Java培训实战教程之Java基础知识精华部分(一)_java概...

黑泽明军
04/13
0
0
Java怎么学?2018最新Java学习路线,技术要求与项目推荐详解!

关注小编吧!! 回顾2017年,java发展的程度超乎了我们的想象,对技术的要求也越来越高,从原先的前端,后端的分布,到现在企业要求的全栈,对于个人能力的要求是逐步提高的,那我们现在究竟...

qq_41781067
05/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

centos7安装rsync及两台机器进行文件同步

centos7安装rsync及两台机器进行文件同步 2017年12月21日 11:17:46 码农下的天桥 阅读数:2210 标签: centosrsync同步 更多 个人分类: 后端 所属专栏: 研发模式及运维 版权声明:本文为博...

linjin200
33分钟前
2
0
jpg、jpeg、png... 的区别

jpg、jpeg、png... 的区别 对于做设计这一行的人来说,这几个图片格式是最常用的,也是最常见的,几乎每一天都要与他们打交道。 刚刚入门的新人通常不知道在什么地方如何使用他们或者说如何更...

DemonsI
52分钟前
5
0
白话SpringCloud | 第十章:路由网关(Zuul)进阶:过滤器、异常处理

前言 简单介绍了关于Zuul的一些简单使用以及一些路由规则的简单说明。而对于一个统一网关而言,需要处理各种各类的请求,对不同的url进行拦截,或者对调用服务的异常进行二次处理等等。今天,...

oKong
57分钟前
3
0
Character的static方法

基本类型char的包装类是Character,使用的比较多,大家是比较熟悉的。 我只是觉得里面有很多static方法,平时不怎么用,学习一下怎么实现的,或许日后就用到了。 static int compare(char x,...

woshixin
今天
2
0
正则介绍_sed

10月17日任务 9.4/9.5 sed sed工具 匹配打印 -n 只打印匹配行,不然其他行也会打印出来 p 打印(配合-n使用) [root@centos7 tmp]# sed -n '/root/'p passwd root:x:0:0:root:/root:/bin/ba...

robertt15
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部