自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

技术是我的毕生追求

Email: xianlubird@gmail.com

  • 博客(20)
  • 资源 (3)
  • 问答 (1)
  • 收藏
  • 关注

原创 Java多线程~~~ScheduledThreadPoolExecutor 计划任务类的使用

前面我们已经学习了使用ThreadPoolExecutor类来实现自动创建和运行线程。但是na'xie

2014-09-26 22:08:59 8828 2

原创 Java多线程之~~~Callable接口获得返回值

ThreadPoolExecutor提供了另一个非常强有力的接口,那就是callable。这个接口和runnable类似,但是实现这个接口的方法是call方法,这个方法是可以返回值的,弥补了runnable不能返回值的悲哀。而且这个方法可以配合ThreadPoolExecutor使用,获得Future接口,从这个接口的名字我们就能知道,返回的这个类似于指向这个线程的一个指针,我们能通过

2014-09-23 22:11:12 17427

原创 Java多线程之~~~使用ThreadPoolExecutor来创建线程

以前我们创建线程的时候都是主动的new一个Thread,然后调用他们的start方法,但是如果线程非常多,任务也非常多的时候,这样写就会显得非常麻烦,当然可能效率也不是很高,Java给我们提供了叫线程创建器这个样概念的类,他可以帮助我们管理这些线程,你做的就是编写好代码,然后交给他,她就会自动帮你运行。当然,带cache的threadpool 对于死掉的线程重新调用,在性能上也会有非常

2014-09-23 21:20:53 9832 1

原创 Java多线程之~~~使用Exchanger在线程之间交换数据

在多线程中,两个线程之间交换数据是非常常见的情况,我们可以使用公共的数据结构,同样,Java也提供了很好的类供我们使用,那就是Exchanger类,这个类可以帮助我们在两个线程之间同步数据结构,下面我们以这个类再来实现一遍生产者消费者模型,貌似这个模型已经被写烂了。package com.bird.concursey.charpet5;import java.util.Li

2014-09-23 20:48:07 5751 2

原创 Java多线程之~~~Phaser重写onAdvance方法

在Phaser类中,我们在每个线程中,每个线程进行完一个阶段完成后都会等待其他线程完成后再一起进行,当所有线程都完成了一个任务的时候,会调用Phaser的onAdvance方法,如果我们想在每个阶段,所有线程都完成他们的阶段工作后做点啥事的话,那就得继承Phaser类来重写Onadvance这个方法来实现我们的目的,下面我们用一个例子来说明,例子就是模拟多个学生考试,考试分为三个阶段,

2014-09-23 20:20:57 4385

原创 Java多线程之~~~Phaser类实现任务的同步

在多线程开发中,经常会碰到将多个任务分配给多个线程,每个线程执行他的任务,但是,每个任务又分为好几个阶段,每个阶段期望各个线程同时达到,意思是,每一步每个线程都要同步,当有一个线程走完第一步的时候,他得等待其他的线程都完成第一步了才能继续下一步,步调一致能解决很多问题。下面我们使用一个例子,这个例子是模拟遍历机器上的一些文件,找出以log结尾的文件,并且他的最后修改时间为24小时以内,

2014-09-22 23:23:12 4794

原创 Java多线程之~~~CyclicBarrier 类的使用

上一节说了CountDown的使用方法,对于用来同步多个线程之间的协作关系,Java更提供了更加高级的方法来实现,这个类就是CyclicBarrier。 它可以实现当多个分支线程完成他们的工作后,调用await方法来等待,然后等所有的分支线程工作完毕后,会自动的调用主线程的run方法,这个主线程是一个实现runnable接口的类,在CyclicBarrier实例化的时候就调用了。下

2014-09-22 10:34:18 3056

原创 Java多线程之~~~使用CountDownLatch来同步多个线程实现一个任务

在多线程开发中,经常会遇到这样的问题,比如,一个线程需要其他的一些辅助线程完成指定的一些任务后才能开启。 类似于一个主线程正在运行,他需要其他分支线程完成一些任务后才能激活他来启动剩下的任务,这里就可以使用Java自带的CountDownLatch这个类来帮我们实现这样的效果。   这个类初始化的时候会指定一个数字,这就是需要等待的资源的数量,每一个资源到位的时候,就调用他的count

2014-09-22 09:38:00 4516 1

原创 Java多线程~~~使用信号量来控制资源获取

在多线程开发中,有一个很经典的名词,那就是信号量。信号量就是用来衡量一个资源的可利用数目的,根据信号量的多少来控制在多线程中各个资源之间的冲突问题,在Java中也提供了对信号量的支持。而且在创建信号量的时候,第二个参数用来指定采取何种分配策略,比如当有很多线程被阻塞,但有一个机会的时候,信号量应该选择谁去运行呢,如果选择true,就采用公平模式,到时候看哪个线程等待的时间最久,

2014-09-21 22:00:34 5299 1

原创 Java多线程开发之~~~多条件Condition接口的使用

我们在多线程开发中,可能会出现这种情况。就是一个线程需要另外一个线程满足某某条件才能继续运行,或者需要其他线程满足好几个条件才能运行,对于这样的多条件的多线程并发,我们如何控制好各个线程之间的关系,使他们能很好的处理冲突不至于相互出现问题呢,下面我们来介绍一下Java提供的Condition这个接口,这个接口很好的实现了这种需求。对于这个问题最经典的例子就是生产者消费者模型,生产者

2014-09-21 19:33:19 4479 2

原创 Java多线程之~~~ReadWriteLock 读写分离的多线程实现

在多线程开发中,经常会出现一种情况,我们希望读写分离。就是对于读取这个动作来说,可以同时有多个线程同时去读取这个资源,但是对于写这个动作来说,只能同时有一个线程来操作,而且同时,当有一个写线程在操作这个资源的时候,其他的读线程是不能来操作这个资源的,这样就极大的发挥了多线程的特点,能很好的将多线程的能力发挥出来。在Java中,ReadWriteLock这个接口就为我们实现了这个需求

2014-09-19 23:25:59 9910 3

原创 Java多线程之~~~Lock接口和ReentrantLock的使用

在多线程开发中,除了synchronized这个关键字外,我们还能通过Lock接口来实现这种效果。通过Lock接口来实现这种多线程加锁效果的好处是非常的灵活,我们不在需要对整个函数加锁,而且可以很方便的把他放在我们函数的任何一个地方,非常的称心,而且从效率上来说,使用Lock接口要比使用synchronized关键字效率高一些,下面我们来使用一个例子来说明这种方法的使用。p

2014-09-19 22:29:10 11062 3

原创 Java多线程之~~~~使用wait和notify实现生产者消费者模型

在多线程开发中,最经典的一个模型就是生产者消费者模型,他们有一个缓冲区,缓冲区有最大限制,当缓冲区满的时候,生产者是不能将产品放入到缓冲区里面的,当然,当缓冲区是空的时候,消费者也不能从中拿出来产品,这就涉及到了在多线程中的条件判断,java为了实现这些功能,提供了wait和notify方法,他们可以在线程不满足要求的时候让线程让出来资源等待,当有资源的时候再notify他们让他们继续

2014-09-18 23:28:02 9808 1

原创 Java多线程之~~~synchronized添加参数来实现独立的代码片段

有时候我们并不想在整个方法前面加上synchronized这个关键字,这样会使整个方法调用变的缓慢,我们只在关键代码的地方增加这个synchronized这个关键字,然后这样就能加快方法或者代码的执行效率。然后可能还有一种情况就是,我们有两个变量,其中任何一个变量都是同时只能一个变量访问,但是两个变量可以在同时被两个变量访问,这种需求下我们就得使用sychronized的带参数的方法来

2014-09-18 22:48:29 4086 1

原创 Java多线程之~~~~synchronized 方法

在多线程开发中,总会遇到多个在不同线程中的方法操作同一个数据,这样在不同线程中操作这个数据不同的顺序或者时机会导致各种不同的现象发生,以至于不能实现你预期的效果,不能实现一致性,这时候就可以使用synchronized关键字对一个方法来说,这个synchronized能保证所有调用这个方法的线程只有一个正在操作这个方法,不会出现同时多个线程进入这个方法的情况,下面我们来一个例子说明这个

2014-09-18 22:07:43 1838 1

原创 Java多线程之-----实现自己的ThreadFactory

工厂模式是最常用的模式之一,在创建线程的时候,我们当然也能使用工厂模式来生产Thread,这样就能替代默认的new THread,而且在自定义工厂里面,我们能创建自定义化的Thread,并且计数,或则限制创建Thread的数量,给每个Thread设置对应的好听的名字,或则其他的很多很多事情,总之就是很爽,下面我们来展示一个简单的Thread工厂模式来创建自己的Thread。

2014-09-16 21:38:35 9876

原创 Java多线程之---ThreadGroup 管理Thread

当创建了好几个线程的时候,很多线程的工作任务是类似或者一致的,这样我们就可以使用ThreadGroup来管理他们,ThreadGroup可以随时的获取在他里面的线程的运行状态,信息,或者一条命令关闭掉这个group里面的所有线程,非常的简单实用,下面我们用一个例子来说明一下如何使用。package com.bird.concursey;import java.util.Da

2014-09-16 21:20:08 25143 2

原创 Java 多线程之--ThreadLocal 简介

在多线程开发中,经常会遇见在run方法里面调用一个公共的属性的事情,由于每次start都会创建一个线程,因此所有的线程共享一个属性,当其中任何一个线程更改了这个属性的值,这个属性在下面的使用过程中都会被改变,这回导致很多不期望发生的事情发生,这就叫做线程不安全的。先来一个例子说明这个问题。package com.bird.concursey;import java.util.Date;

2014-09-16 20:46:36 2407

原创 Java 多线程之-----守护进程

守护进程,顾名思义就是默默在后台运行的进程,当JVM上没有其他进程运行时运行的进程,最典型的一个列子就是JVM自带的垃圾清理机,他就是在其他程序不运行的时候占用CPU来进行清理内存垃圾,因此他具有很强的不确定性,因为你不知道啥时候他就会运行,也不知道啥时候他不会运行,因此适合做一个不太重要的清理工作或者服务器上的监听工作。下面我们使用JVM的daemon来写一个小例子,实现的效果如

2014-09-15 23:38:42 6713 1

原创 Java 多线程之--- Thread.join介绍

许久许久没有写过博客了,以前上班总是没有时间,但是总感觉写博客还是很好的一种记录自己技术进程的一种方式于是在辞职后来到北软,又一次上学了,又一次有时间来写博客了,所以再次开始写博客了,呵呵,再次当学生的感觉真好!!!!   这次说的是Thread的join方法,以前总是使用他的run和sleep方法,哪两个都是比较清楚的,对于这个join方法,他的主要功能就是,当你在一个方

2014-09-15 22:38:15 6062 1

Spring3.1 AOP倚赖jar 包汇总

Spring 3.1倚赖的外部jar包汇总

2012-05-21

《高质量C.编程指南》

教你平时不足以注意的编程好习惯,值得一睹

2011-08-25

让你不再害怕指针 C++版本

介绍C++指针的一本好书,适合对指针不了解或者迷茫的哥们看

2011-06-05

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除