专栏首页机器学习从入门到成神《实战Java高并发程序设计》读书笔记

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

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

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

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

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

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

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

5、锁粗化

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

例如:

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

会被整合成:

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

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

for(int i=0;i<n;i++){
   synchronized(lock){
       //do sth
   }
}

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

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捕获异常。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 各大公司Java后端开发面试题总结

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

    大黄大黄大黄
  • Java知识点总结

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

    大黄大黄大黄
  • 机器学习之深入理解SVM

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

    大黄大黄大黄
  • windows 常用thread方法

    1.HANDLE CreateThread( _In_opt_LPSECURITY_ATTRIBUTES lpThreadAttributes, _In_S...

    战神伽罗
  • 多线程编程必备技术—— volatile,synchronized,lock

    volatile: volatile是一个类型修饰符(type specifier)。它是被设计用来修饰被不同线程访问和修改的变量。确保本条指令不会...

    Java深度编程
  • java基础题目总结

    有些基础题目由于工作中用的比较少但却又是不可少的,这样回答起来就会反应慢,不确定,不准确,特此开了文章记录遇到的不确定或者回答比较拗口的问题。 1.servle...

    Ryan-Miao
  • Java 中的锁原理、锁优化、CAS、AQS 详解!

    结论:如果volatile变量修饰符使用恰当的话,它比synchronized的使用和执行成本更低,因为它不会引起线程上下文的切换和调度。

    Java团长
  • Java中的锁原理、锁优化、CAS、AQS

    结论:如果volatile变量修饰符使用恰当的话,它比synchronized的使用和执行成本更低,因为它不会引起线程上下文的切换和调度。

    Java团长
  • java多线程加锁的简单处理办法 原

        当对数据修改时,如果两个线程同时去修改同一条数据,这样产生的结果就不是我们预期的结果。这时候就需要对修改操作进行加锁,让jvm里同一时刻只能有一个线程能...

    尚浩宇
  • Java 中的锁原理、锁优化、CAS、AQS 详解!

    结论:如果volatile变量修饰符使用恰当的话,它比synchronized的使用和执行成本更低,因为它不会引起线程上下文的切换和调度。

    芋道源码

扫码关注云+社区

领取腾讯云代金券