最近有足够的空闲时间 去东看看西看看,突然留意到在Java的并发编程中,有关线程中断的,以前初学时一直没弄清楚的一些小东西。
于是,刚好把收获简单的总结一下,通过此文来总结记录下来。从源码看线程的状态在开始分析线程的中断工作之前,我们肯定要先留意一个点,那就是肯定是有开启,才会有与之对应的中断工作出现。
开启一个线程的工作,相信每个Javaer都烂熟于心。它很简单,new一个thread对象,然...
分类:
编程语言 时间:
2016-07-19 13:45:59
阅读次数:
256
一、Lock定义 lock 关键字可以用来确保代码块完成运行,而不会被其他线程中断。它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待。这是通过在代码块运行期间为给定对象获取互斥锁来实现的。 在多线程中,每个线程都有自己的资 ...
GC停顿:在可达性分析的过程中,对象引用关系不再发生变化,需要停顿所有线程(安全点)OopMap:保存CGrootsOopMap收集数据的时机:SafePoint时抢先式中断:在GC发生时,把所有线程终端,如果发现有线程中断的地方不在安全点上,就恢复线程,让其执行到安全点上主动式中断:当G..
分类:
其他好文 时间:
2016-07-06 10:33:17
阅读次数:
194
GC停顿:在可达性分析的过程中,对象引用关系不再发生变化,需要停顿所有线程(安全点)OopMap:保存CGrootsOopMap收集数据的时机:SafePoint时抢先式中断:在GC发生时,把所有线程终端,如果发现有线程中断的地方不在安全点上,就恢复线程,让其执行到安全点上主动式中断:当G..
分类:
其他好文 时间:
2016-07-06 10:31:38
阅读次数:
245
interrupt()的作用是中断本线程。本线程中断自己是被允许的;其它线程调用本线程的interrupt()方法时,会通过checkAccess()检查权限。这有可能抛出SecurityException异常。如果本线程是处于阻塞状态:调用线程的wait(), wait(long)或wait(lo ...
分类:
其他好文 时间:
2016-06-27 06:45:25
阅读次数:
138
2. 终止线程的方式
Thread中的stop()和suspend()方法,由于固有的不安全性,已经建议不再使用!
下面,我先分别讨论线程在“阻塞状态”和“运行状态”的终止方式,然后再总结出一个通用的方式。
2.1 终止处于“阻塞状态”的线程
通常,我们通过“中断”方式终止处于“阻塞状态”的线程。
当线程由于被调用了sleep(), wait(), join()等方法而进入阻塞状态;若此...
分类:
编程语言 时间:
2016-06-23 16:09:09
阅读次数:
239
概述 之前讲解Thread类中方法的时候,interrupt()、interrupted()、isInterrupted()三个方法没有讲得很清楚,只是提了一下。现在把这三个方法同一放到这里来讲,因为这三个方法都涉及到多线程的一个知识点 中断机制。 Java没有提供一种安全、直接的方法来停止某个线程 ...
分类:
编程语言 时间:
2016-06-15 19:16:58
阅读次数:
277
在我们的程序中,经常会有一些耗时较长的运算,为了保证用户体验,不引起界面不响应,我们一般会采用多线程操作,让耗时操作在后台完成,完成后再进行处理或给出提示,在运行中,也会时时去刷新界面上的进度条等显示元,必要进,还要控制后台线程中断当前操作。 以前,类似的应用会比较麻烦,需要写的代码较多,也很容易出 ...
分类:
编程语言 时间:
2016-06-07 14:27:52
阅读次数:
156
零. 简介
Executors 是 Executor、ExecutorService、ThreadFactory、Callable 类的工厂和工具方法。
一. 源码解析
创建一个固定大小的线程池:通过重用共享无界队列里的线程来减少线程创建的开销。当所有的线程都在执行任务,新增的任务将会在队列中等待,直到一个线程空闲。由于在执行前失败导致的线程中断,如果...
分类:
编程语言 时间:
2016-05-18 18:48:12
阅读次数:
269
【0】概述 volatile 是易变的、不稳定的意思。很多人根本就没见过,不知道它的存在。 volatile应该解释为“直接存取原始内存地址”比较合适,“易变的”这种解释有点误导人;“易变”是因为外在因素引起的,像多线程,中断等,并不是因为用volatile修饰了的变量就是“易变”了,假如没有外因, ...
分类:
其他好文 时间:
2016-05-08 15:07:38
阅读次数:
129