java多线程
文章平均质量分 70
liangjianyong007
这个作者很懒,什么都没留下…
展开
-
JAVA多线程之(wait notify)
在JAVA中,并没有类似于操作系统PV原语操作、进程互斥等相关的方法的。JAVA的进程同步是通过synchronized来实现的,需要说明的是,JAVA的synchronized类似于操作系统概念中的互斥内存块,在JAVA中的Object类型中,都是带有一个内存锁的,在有线程获取该内存锁后,其它线程无法访问该内存,从而实现JAVA中简单的同步、互斥操作。明白这个原理,就能理解为什么synchron原创 2016-01-21 19:48:39 · 460 阅读 · 0 评论 -
JAVA多线程之(CyclicBarrier)
CyclicBarrier与CountDownLatch类似,一般用于任务拆分,例如一个任务分派多个子任务,然后组任务需要等待所有子任务执行结束后合并子任务返回的结果。具体请参照实例: package nc.com.thread.other;import java.util.Random;import java.util.concurrent.CyclicBarrier;/**原创 2016-03-20 16:06:56 · 318 阅读 · 0 评论 -
JAVA多线程之(CountDownLatch)
一个同步辅助类,它允许一个或多个线程一直等待一组其他线程执行结束后再做处理。用给定的计数初始化 CountDownLatch。由于调用了 countDown() 方法,所以在当前计数到达零之前,await 方法会一直受阻塞。之后,会释放所有等待的线程,await 的所有后续调用都将立即执行。 一个线程(或者多个), 等待另外N个线程完成某个事情之后才能执行,实例代码如下: pa原创 2016-03-20 15:42:58 · 295 阅读 · 0 评论 -
JAVA多线程之Object的(wait()、notify())
如果需要调用一个对象的wait()方法,当前线程必须持有这个对象的锁,因此调用wait()方法必须在同步块或者同步方法中进行(synchronized块或者synchronized方法)。 调用某个对象的wait()方法,相当于让当前线程交出此对象的锁,然后进入等待状态,等待后续再次获得此对象的锁(Thread类中的sleep方法使当前线程暂停执行一段时间,从而让其他线程有机会继续执行,但它原创 2016-03-20 15:29:25 · 348 阅读 · 0 评论 -
java多线程之(suspend()、resume())
suspend()和resume()方法,从字面意义上可以了解到这两个方法是一对的,suspend()方法就是将一个线程挂起(暂停),resume()方法就是将一个挂起线程复活继续执行。参照例子: package nc.com.thread.traditional.example;public class TestSuspendAndResume { public static vo原创 2016-03-20 15:01:01 · 1148 阅读 · 0 评论 -
JAVA多线程之(Interrupt)
interrupt,顾名思义,即中断的意思。单独调用interrupt方法可以使得处于阻塞状态的线程抛出一个异常, 也就说,它可以用来中断一个正处于阻塞状态的线程;另外,通过interrupt方法和isInterrupted()方法来停止正在运行的线程。具体参照实例: package nc.com.thread.traditional.example;/** * inter原创 2016-03-20 14:51:02 · 386 阅读 · 0 评论 -
java多线程之(yield)
yield方法会让当前线程交出CPU权限,让CPU去执行其他的线程。它跟sleep方法类似,同样不会释放锁。但是yield不能控制具体的交出CPU的时间, 另外,yield方法只能让拥有相同优先级的线程有获取CPU执行时间的机会。 注意,调用yield方法并不会让线程进入阻塞状态,而是让线程重回就绪状态, 它只需要等待重新获取CPU执行时间,这一点是和sleep方法不一样的。具体请参照一下实例:原创 2016-01-21 20:34:25 · 495 阅读 · 0 评论 -
java多线程之(sleep)
java的Thread.sleep()相当于让线程睡眠,交出CPU,让CPU去执行其他的任务。 但是有一点要非常注意,sleep方法不会释放锁,也就是说如果当前线程持有对某个对象的锁,则即使调用sleep方法,其他线程也无法访问这个对象。看下面这个例子就清楚了:package nc.com.thread.traditional.example;/*** @ClassName: Test原创 2016-01-21 20:26:27 · 782 阅读 · 0 评论 -
JAVA多线程之(join)
java多线程中,join方法是主线程等待一个子线程结束后再继续执行主线程后续代码,wait方法会让线程进入阻塞状态,并且会释放线程占有的锁,并交出CPU执行权限,由于wait方法会让线程释放对象锁,研究java Thread类的join方法发现,其实join方法也是调用wait方法实现,所以join方法同样会让线程释放对一个对象持有的锁。Thread类的join方法的源代码:原创 2016-01-21 20:12:25 · 478 阅读 · 0 评论 -
java多线程之(Exchanger)
Exchanger是自jdk1.5起开始提供的工具套件,一般用于两个工作线程之间交换数据。具体场景如下:此类提供对外的操作是同步的;用于成对出现的线程之间交换数据;可以视作双向的同步队列;可应用于基因算法、流水线设计等场景。package nc.com.thread.other;import java.util.concurrent.Exchanger;import java原创 2016-03-20 16:14:42 · 407 阅读 · 0 评论