前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《实战Java高并发程序设计》读书笔记

《实战Java高并发程序设计》读书笔记

作者头像
大黄大黄大黄
发布2018-09-14 16:53:08
3170
发布2018-09-14 16:53:08
举报

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/article/details/75009667

有助于提高锁性能的几点建议

1、减少锁持有的时间——–只在必要时进行同步

2、减小锁的粒度 ConcurrentHashMap(只有获取全局信息的方法调用不频繁时,这种方法才能真正意义上提高系统吞吐量)

3、读写分离锁替代独占锁——–ReadWriteLock

4、锁分离的思想——–LinkedBlockingQueue take()、put()使用不同的锁

5、锁粗化

虚拟机在遇到一连串连续地对同一锁不断进行请求和释放的操作时,便会把所有的锁操作整合成对锁的一次请求,从而减少对锁的请求同步次数。

例如:

代码语言:javascript
复制
public void demoMethod(){
   synchronized(lock){
       //do sth
   }
   //做其他不需要同步的工作,但能很快执行完毕
   synchronized(lock){
       //do sth
   }
}

会被整合成:

代码语言:javascript
复制
public void demoMethod(){
   //整合成一次锁请求
   synchronized(lock){
       //do sth
      //做其他不需要同步的工作,但能很快执行完毕
   }
}

还有在循环内请求锁的时候,有必要对锁进行粗化:

代码语言:javascript
复制
for(int i=0;i<n;i++){
   synchronized(lock){
       //do sth
   }
}

一种更加合理的做法应该是在外层只请求一次锁:

代码语言:javascript
复制
synchronized(lock){
    for(int i=0;i<n;i++){

    }
}

并行模式与算法

1、单例模式

2、不变模式

3、生产者-消费者模式

4、Future模式

Future模式是多线程开发中非常常见的一种设计模式,它的核心思想是异步调用。(JDK应用:Callable接口)

5、并行流水线

6、并行搜索

7、并行排序

8、并行算法:矩阵乘法


线程池相关

线程池核心参数

参数

含义

corePoolSize

线程池中的核心线程数

maximumPoolSize

线程池中的最大线程数量

keepAliveTime

多余的空闲线程的存活时间

unit

keepAliveTime单位

workQueue

任务队列,被提交但是尚未被执行的任务

threadFactory

线程工厂

handler

拒绝策略

线程池的拒绝策略

策略

含义

AbortPolicy

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

CallerRunsPolicy

只要线程池未关闭,直接在调用者线程中,运行当前被丢弃的任务(性能急剧下降)

DiscardOledestPolicy

丢弃最老的一个请求

DiscardPolicy

默默的丢弃无法处理的任务

定义:守护线程是一种特殊的线程,它是系统的守护者,在后台默默地完成一些系统性的服务,比如垃圾回收线程、JIT线程就可以理解为守护线程。


接口Callable与Runnable区别

1)Callable接口的call()方法可以有返回值,而Runnable接口的run()方法没有返回值。

2)Callable接口的call()方法可以声明抛出异常,而Runnable接口的run()方法不可以声明抛出异常。


方法excute()与submit()的区别

1) 方法excute()没有返回值,而submit()方法可以有返回值。

2)方法excute()在默认的情况下异常直接抛出,不能捕获,但可以通过自定义Thread-Factory的方式进行捕获,而submit()方法在默认情况下,可以有catch Execution-Exception捕获异常。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年07月13日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 有助于提高锁性能的几点建议
  • 并行模式与算法
  • 线程池相关
  • 接口Callable与Runnable区别
  • 方法excute()与submit()的区别
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档