昆明java培训
达内昆明广州春城路

18487146383

热门课程

Java并发包

  • 时间:2016-07-31
  • 发布:昆明Java培训
  • 来源:达内新闻

1、synchronized的功能扩展:重入锁(ReentrantLock)

重入锁性能要比synchronized好,控制力度比较小,而且使用起来也更灵活;

重入锁线程在等待的时候可以被中断,而synchronized要么获得锁继续执行,要么保持等待;

重入锁线程在等待的时候可以限时等待;

重入锁提供了公平锁和非公平锁两种模式;

2、Condition条件

wait和notify方法和synchronized关键字合作使用,而condition是和重入锁合作使用通过lock.newCondition()方法可以生成一个与重入锁绑定的Condition对象;

Condition提供了一些基本方法:

await:是当期线程等待,并释放当前锁,当其他线程使用signal或者signalAll时,线程会重新获得锁并继续执行;

awaitUninterruptibly与await基本相同,但它不会再等待过程中响应中断;

signal唤醒一个线程

signalAll方法唤醒所有等待线程;

3、Semaphore信号量:允许多个线程同时访问

acquire申请许可,若无法获得,则线程等待直到有一个线城释放许可或当前线程被中断;

acquireUninterruptibly和acquire类似,不过不响应中断;

release释放许可

4、ReadWriteLock读写锁

读写分离锁,如果使用synchronized或者可重入锁,线程的所有读之间,读与写之间,写与写之间都是串行操作,但读与度之不会造成数据的破坏,这也就是读写锁所做的事情;

5、倒计时器CountDownLatch

6、循环 栅栏CyclicBarrier

7、线程池

Executor提供了各种各样的线程池:

newFixedThreadPool:固定数量线程的线程池,当任务超出线程数量时,暂存在阻塞队列中;

newSingleExecutor:返回一个只有一个线程的线程池,多于一个任务的话,保存在阻塞队列中;

newCachedThreadPool:返回一个可根据实际情况调整线程数量的线程池,但是可以设置线程池的最大线程数量,线程存活时间等;

newSingleThreadScheduleExecutor:返回一个ScheduledExecutorService对象,线程池大小为1,有定时执行任务的功能;

newScheduleThreadPool:返回一个ScheduledExecutorService对象,但线程池的线程数量可以指定;

当线程池超过负载的时候(线程池用完,等待队列用完啊),jdk有几种内置的策略:

AbortPolicy:直接抛出异常,阻止系统正常工作

CallerRunsPolicy:只要线程池未关闭,直接在线程池中运行该任务

DiscardOledestPolicy:丢弃一个最老的请求

DiscardPolicy:直接丢弃,不与任何处理;

8、Fork/Join框架:分而治之

类似于分治思想,Fork阶段用来把任务分割成多个子任务,Join阶段用来收集结果

上一篇:Java并行基础
下一篇:锁的优化及注意事项

昆明java培训机构:java未来的发展走向

昆明java培训机构:java学完可以干什么!

昆明java培训机构:如何搞定BAT和华为offer?有这份攻略就够了!

昆明java培训机构:学Java别担心枯燥和无聊

选择城市和中心
贵州省

广西省

海南省

扫一扫

了解更多干货