如何中断一个正在运行的线程
摘要:有时候中断一个正在运行的线程是一个比较重要的应用,但是貌似也是比较困难的事情。假设我们正在用第三方支付软件进行支付,点击确定以后,由于某些原因需要取消这次支付,貌似现在还没有哪家的支付软件能够实现这样的功能,因为这个实在太困难了。开启一个线程去进行支付功能后,即使做了一个这样的中断这个线程的功能,这...
阅读全文
posted @
2015-07-06 18:23
飞机说之代码也疯狂
阅读(2422)
推荐(0)
14、Future之取消任务
摘要:任务和线程的启动很容易。在大多数时候,我们都会让它们运行直到结束,或者让它们自行停止。然而,有时候我们希望提前结束任务或线程,或者是因为用户取消了操作,或者应用程序需要快速关闭。要使任务和线程能安全、快速、可靠地停止下来,并不是一件容易的事。Java没有提供任何机制安全的终止线程,但它提供了中断(I...
阅读全文
posted @
2015-06-01 13:47
飞机说之代码也疯狂
阅读(398)
推荐(0)
13、ArrayBlocking
摘要:java.util.concurrentClass ArrayBlockingQueue阻塞队列是通过数组来实现的。队列的元素顺序是FIFO。队列的头部元素是等待最长时间的,队列的尾部元素是在队列中时间最短的。新元素插在队列的尾部,队列的检索从队列的头部开始。这是一个典型的有边界的缓存,在这个固定大...
阅读全文
posted @
2015-06-01 12:14
飞机说之代码也疯狂
阅读(170)
推荐(0)
12、Exchanger
摘要:java.util.concurrentClass Exchanager用于实现两个线程之间元素的交换。每个线程在完成一定的事务后想与另外一个线程交换数据,第一个拿出数据的线程一直等待第一个拿出数据的线程,直到两个线程都拿出数据,才能进行数据交换。Exchanger对于遗传数学和管道设计应用也许很有...
阅读全文
posted @
2015-06-01 11:48
飞机说之代码也疯狂
阅读(198)
推荐(0)
11、CountDownLatch
摘要:java.util.concurrentClass CountDownLath使一个线程或多个线程等待另外一个线程或多个线程操作的完成。CountDownLath以一个给定的数字初始化。await方法一直阻塞直到当前这个数字由于其他线程运行countDown方法将初始化的数字减为0,阻塞等待的线程才...
阅读全文
posted @
2015-05-29 17:37
飞机说之代码也疯狂
阅读(193)
推荐(0)
10、CyclicBarrier
摘要:java.util.concurrentClass CyclicBarrier使得一系列的线程相互等待,直到全部线程都到达一个公共的屏障点。这个屏障之所以称为Cyclic(循环的),是因为它能够在等待线程释放后重复使用。CyclicBarrier支持一个可选Runnable的参数,在每个屏障点运行一...
阅读全文
posted @
2015-05-29 16:55
飞机说之代码也疯狂
阅读(186)
推荐(0)
9、Semaphore
摘要:java.util.concurrentClass SemaphoreSemaphore常用来限制一定数量的线程来访问某个共享资源。一个Semaphore控制了一组令牌。除非存在可使用的令牌否则在调用acquire去获得资源时将会被阻塞。release方法就是释放令牌,潜在的能够为acquire提供...
阅读全文
posted @
2015-05-29 16:25
飞机说之代码也疯狂
阅读(222)
推荐(0)
8、Condition
摘要:java.util.concurrent.locksInterface ConditionCondition类似于传统的wait、notify/notifyAll方法(这些方法需要内部监听器)。Condition是在Lock之下,换句话说,有了Lock才可能产生Condition。在一个Lock之下...
阅读全文
posted @
2015-05-29 15:12
飞机说之代码也疯狂
阅读(161)
推荐(0)
7、ReadWriteLock
摘要:读写锁:分为读锁和写锁,多个读锁不互斥,读锁与写锁互斥,写锁与写锁互斥,这是由JVM控制的,我们只要上好相应的锁即可。如果你的代码只读数据,可以很多人同时读,但是不能同时写,那就上读锁;如果代码修改数据,只能一个人在写,且不能同时读取,那就上写锁。总之,读的时候上读锁,写的时候上写锁。java.ut...
阅读全文
posted @
2015-05-28 09:07
飞机说之代码也疯狂
阅读(162)
推荐(0)
6、Lock
摘要:java.util.concurrent.locksInterface Lock所有实现类:ReentrantLock、ReentrantReadWriteLock.ReadLock、ReentrantReadWriteLock.writeLockLock的实现比使用synchronized获得更多...
阅读全文
posted @
2015-05-27 13:54
飞机说之代码也疯狂
阅读(201)
推荐(0)
5、java的concurrent包下的线程池
摘要:1、java.util.concurrent Class Executurspublic class Executors extends Object其中提供了返回类型为Executor、ExecutorService、ScheduledExecutorService、ThreadFactory和...
阅读全文
posted @
2015-05-27 12:34
飞机说之代码也疯狂
阅读(489)
推荐(0)
4、定时器Timer
摘要:虽然Timer这个类已经很少用,在实际项目当中都是用第三方定时器项目,如quartz。但是如果研究一下Timer的源码,还是有必要的,因为其中包含了涉及的知识点还是挺多的。比如,自动扩容、优先级队列,还有任务调度的一些策略。 1 /** 2 * 在特定的时间调度特定的任务。 如果 3 ...
阅读全文
posted @
2015-05-26 18:17
飞机说之代码也疯狂
阅读(241)
推荐(0)
3、InterruptedException
摘要:我们知道像线程的sleep、wait等方法都需要捕捉(不能抛出)InterruptedException。什么时候会导致线程抛出这个InterruptedException异常呢? 1 public class ThreadTest { 2 public static void main(St...
阅读全文
posted @
2015-05-26 16:50
飞机说之代码也疯狂
阅读(248)
推荐(0)
2、ThreadLocal
摘要:我们知道线程之所以不安全是因为线程之间存在竞争,而存在竞争是因为它们共享资源。因此有时候,我们会需要将资源只在本线程内,资源只与相应的线程存在关系,那么就避免了线程不安全。ThreadLocal就是一个将变量与特定的线程进行绑定的一个类,资源只会属于一个特定的线程。ThreadLocal就是一个Ma...
阅读全文
posted @
2015-05-26 16:18
飞机说之代码也疯狂
阅读(167)
推荐(0)
1、线程的启动
摘要:我们要启动一个线程,就是调用一个线程实例的start方法。让我们来看看start方法的源码: 1 public synchronized void start() { 2 3 //0值就表示这个线程是新启动的 4 if(threadStatus!=0) { 5 throw new I...
阅读全文
posted @
2015-05-26 09:51
飞机说之代码也疯狂
阅读(246)
推荐(0)