在多线程开发中,经常会碰到将多个任务分配给多个线程,每个线程执行他的任务,但是,每个任务又分为好几个
阶段,每个阶段期望各个线程同时达到,意思是,每一步每个线程都要同步,当有一个线程走完第一步的时候,他得等
待其他的线程都完成第一步了才能继续下一步,步调一致能解决很多问题。下面我们使用一个例子,这个例子是模拟遍
历机器上的一些文件,找出以log结尾的文件,并且他的最后修改时间为24小时以内,...
分类:
编程语言 时间:
2014-09-23 03:08:23
阅读次数:
301
上一节说了CountDown的使用方法,对于用来同步多个线程之间的协作关系,Java更提供了更加高级的方法来实
现,这个类就是CyclicBarrier。 它可以实现当多个分支线程完成他们的工作后,调用await方法来等待,然后等所有的分
支线程工作完毕后,会自动的调用主线程的run方法,这个主线程是一个实现runnable接口的类,在CyclicBarrier实例化
的时候就调用了。
下...
分类:
编程语言 时间:
2014-09-22 13:21:42
阅读次数:
267
在多线程开发中,经常会遇到这样的问题,比如,一个线程需要其他的一些辅助线程完成指定的一些任务后才能开
启。 类似于一个主线程正在运行,他需要其他分支线程完成一些任务后才能激活他来启动剩下的任务,这里就可以使用
Java自带的CountDownLatch这个类来帮我们实现这样的效果。 这个类初始化的时候会指定一个数字,这就是需要等
待的资源的数量,每一个资源到位的时候,就调用他的count...
分类:
编程语言 时间:
2014-09-22 10:55:52
阅读次数:
239
在多线程开发中,有一个很经典的名词,那就是信号量。信号量就是用来衡量一个资源的可利用数目的,根据信号
量的多少来控制在多线程中各个资源之间的冲突问题,在Java中也提供了对信号量的支持。
而且在创建信号量的时候,第二个参数用来指定采取何种分配策略,比如当有很多线程被阻塞,但有一个机会的时
候,信号量应该选择谁去运行呢,如果选择true,就采用公平模式,到时候看哪个线程等待的时间最久,...
分类:
编程语言 时间:
2014-09-21 23:57:51
阅读次数:
277
我们在多线程开发中,可能会出现这种情况。就是一个线程需要另外一个线程满足某某条件才能继续运行,或者需
要其他线程满足好几个条件才能运行,对于这样的多条件的多线程并发,我们如何控制好各个线程之间的关系,使他们
能很好的处理冲突不至于相互出现问题呢,下面我们来介绍一下Java提供的Condition这个接口,这个接口很好的实现了
这种需求。
对于这个问题最经典的例子就是生产者消费者模型,生产者...
分类:
编程语言 时间:
2014-09-21 22:11:01
阅读次数:
405
线程交互中用到的三个基本函数:
void notify();唤醒在此对象监视器上等待的单个线程。
void notifyAll();唤醒在此对象监视器上等待的所有线程。
void wait();导致当前的线程等待,直到其他线程调用此对象的notify()或者notifyAll()方法。
void wait(long timeout);wait()的重载版本,同样导致当前线程等待,直到其他线...
分类:
编程语言 时间:
2014-09-21 03:40:29
阅读次数:
234
在多线程开发中,除了synchronized这个关键字外,我们还能通过Lock接口来实现这种效果。通过Lock接口来实现
这种多线程加锁效果的好处是非常的灵活,我们不在需要对整个函数加锁,而且可以很方便的把他放在我们函数的任何
一个地方,非常的称心,而且从效率上来说,使用Lock接口要比使用synchronized关键字效率高一些,下面我们来使用
一个例子来说明这种方法的使用。
p...
分类:
编程语言 时间:
2014-09-19 23:59:06
阅读次数:
469
在多线程开发中,经常会出现一种情况,我们希望读写分离。就是对于读取这个动作来说,可以同时有多个线程同
时去读取这个资源,但是对于写这个动作来说,只能同时有一个线程来操作,而且同时,当有一个写线程在操作这个资
源的时候,其他的读线程是不能来操作这个资源的,这样就极大的发挥了多线程的特点,能很好的将多线程的能力发挥
出来。
在Java中,ReadWriteLock这个接口就为我们实现了这个需求...
分类:
编程语言 时间:
2014-09-19 23:56:36
阅读次数:
423
一、线程栈模型
线程栈模型是理解线程调度原理以及线程执行过程的基础。线程栈是指某时刻时内存中线程调度的栈信息,当前调用的方法总是位于栈顶,线程栈的内容是随着线程的运行状态变化而变化的,研究线程栈必须选择一个运行的时刻(指代码运行到什么地方)
上图中的栈A是主线程main的运行栈信息,当执行new JavaThreadDemo().threadMethod();方法时,threadMet...
分类:
编程语言 时间:
2014-09-19 22:35:56
阅读次数:
325