摘要:ThreadLocal: 线程局部变量 一)、ThreadLocal的引入 用途: 是 解决多线程间并发访问 的方案,不是解决数据共享的方案。 特点: 每个线程提供变量的独立副本,所有的线程使用同一个ThreadLocal, 通过ThreadLocal来创建自己的独立副本。 好处: 解决多个线程
阅读全文
摘要:Semaphore: 信号量 Semaphore: 可以指定多个线程同时访问某一资源。 一)、构造方法 公平锁: 锁的顺序与线程的执行顺序有关 非公平锁:锁的执行顺序与线程的执行顺序无关 默认使用非公平锁 。 二)、获取许可的方法 1)、acquire():获取一个许可,如果获取失败,则线程等待,等
阅读全文
摘要:Condition对象 一)、Condition的定义 Condition对象: 与锁关联,协调多线程间的复杂协作。 获取与锁绑定的Condition对象: Condition的方法: await(): 使当前的线程等待并释放锁。 singalAll(): 唤醒所有等待的线程,只有一个线程重新获得锁
阅读全文
摘要:ReadWriteLock: 读写锁 ReadWriteLock: JDK1.5提供的读写分离锁,采用读写锁分离可以有效帮助减少锁竞争。 特点: 1).使用读写锁。当线程只进行读操作时,可以允许多个线程同时读 2).写写操作,读写操作间依然需要相互等待和持有锁。 一).使用读写锁与使用重入锁进行读读
阅读全文
摘要:优秀的github项目学习 后期会陆续添加遇到的优秀项目 https://github.com/chaijunkun
阅读全文
摘要:synchronized:内部锁 起源: 并行程序开发涉及多线程、多任务间的协作和数据共享 一)、内部锁:synchronized 1).定义在方法上 public synchronized void method() 当method方法被调用时,调用线程必须获得当前对象的锁。 锁对象:当前对象。
阅读全文
摘要:ReentreantLock:重入锁 参考:https://www.cnblogs.com/nullzx/p/4968674.html 一)、 ReentrantLock与synchronized的区别: 1).JDK1.5,在高并发的情况下,ReentrantLock的性能比Synchronize
阅读全文
摘要:后期会陆续添加: 1).RMI: https://www.jianshu.com/p/de85fad05dcb、 2).红黑树: https://www.cnblogs.com/wskwbog/p/11236136.html https://blog.csdn.net/cckevincyh/arti
阅读全文
摘要:Java内存模型与volatile关键字 一)、并发程序开发 并行程序的开发要涉及多线程、多任务间的 协作 和 数据共享 问题。 常用的并发控制: 内部锁、重入锁、读写锁、信号量。 二)、线程的特点 线程的特点: 1).每一个线程都有一块工作内存区,存放所有线程 共享 的主内存中 变量值 的拷贝。
阅读全文
摘要:GitHub远程库的搭建 一)、配置SSH 步骤: 1).注册GitHub账号 2).本地git仓库与远程的GitHub仓库的传输要通过SSH进行加密 3).创建SSH key 1.检查在用户主目录下是否有.ssh文件,例:H:\Users\mac\.ssh 2.检查ssh下是否有id_rs
阅读全文
摘要:Executor框架 Executor类: 在java.util.concurrent类中,是JDK并发包的核心类。 ThreadPoolExecutor: 线程池。 Excutors: 线程池工厂,通过Executor可以创建一个特定功能的线程池。 一)、Executor框架的类的关系 Execu
阅读全文
摘要:线程池的简单实现 一)、多线程的弊端 1).线程数量过大,耗尽CPU和内存资源。 2).线程的创建和关闭需要花费时间。 3).线程本身也要占用内存空间。 4).大量的线程回收会给GC带来压力,延长GC的停顿时间。 二)、线程池的作用 1).节省多线程在并发时不断创建和销毁线程所带来的额外开销,实现线
阅读全文
摘要:wait()、notify、notifyAll()的使用 参考:https://www.jianshu.com/p/25e243850bd2?appinstall=0 一)、java 中对象锁的模型 JVM会为一个使用内部锁(synchronized)的对象维护两个集合,Entry Set和Wait
阅读全文
摘要:不变模式 一)、不变模式的概述 使用场景: 当多线程对同一个对象进行读写操作时,为保证对象数据的一致性和正确性,有必要对对象进行同步。 作用: 确保在没有同步操作的多线程环境中,保持对象内部状态的一致性和正确性 核心思想:一个对象一旦被创建,则它的内部状态将永远不会改变,同时,其内部状态也决不会自行
阅读全文
摘要:并行模式之Guarded Suspension模式 一)、Guarded Suspension: 保护暂存模式 应用场景:当多个客户进程去请求服务进程时,客户进程的请求速度比服务进程处里请求的速度快,此时,为了保护客户进程的请求不会丢失,使用 Guarded Suspension模式,增加一个请求队
阅读全文
摘要:并行模式之Master Worker模式 一)、Master Worker模式 作用: 将一个大任务分解成若干个小任务,分发给多个子线程执行。 注: 将大任务分解成小任务,小任务的实现逻辑要相同。 二)、Master Worker模式的结构 Master Worker的核心思想:由Master进程和
阅读全文
摘要:并发程序设计之Future模式 一)、使用Future模式的原因 当某一段程序提交了一个请求,期待得到一个答复,但服务程序对这个请求的处理可能很慢,在单线程的环境中,调用函数是同步的,必须等到服务程序返回结果后才能进行其他处理,在这段时间里,客户端一直处于等待状态。 二)、Future模式 使用并发
阅读全文
摘要:NIO的使用 一)、什么叫NIO? 定义:是一套新的Java I/O标准, 在java1.4中被纳入JDK中。 二)、NIO的实现方法 NIO是基于块的, 以块为基本单位处理数据。 标准的I/O是基于流实现的,以字节为单位处理数据。 三)、NIO的特性 1).为所有的原始类型特供Buffer支持 B
阅读全文
摘要:HashSet源码学习 一)、Set集合的主要使用类 1). HashSet 基于对HashMap的封装 2). LinkedHashSet 基于对LinkedHashSet的封装 3). TreeSet 基于对TreeSet的封装 注: HashSet、 LinkedHashSet、 TreeSe
阅读全文
摘要:TreeMap的源码学习 一)、TreeMap的特点 根据key值进行排序。 二)、按key值排序的两种排序算法实现 1).在构造方法中传入比较器 public TreeMap(Comparator comparator) { this.comparator = comparator; } 比较器c
阅读全文
摘要:HashMap的源码学习以及性能分析 一)、Map接口的实现类 HashTable、HashMap、LinkedHashMap、TreeMap 二)、HashMap和HashTable的区别 1).HashTable的大部分算法做了同步,线程是安全的,HashMap没有同步,线程不安全。 2).Ha
阅读全文
摘要:List的使用 List的子类 1). ArrayList 数据结构:数组 2). Vector 数据结构:数组 3). LinkedList 数据结构:循环双向链表 ArrayList 、Vector、LinkedList都来自AbstractList的实现,AbstratList直接实现了Lis
阅读全文
摘要:字符串优化处理 一)、字符串的内部结构 1)、char数组 表示String的内容,所有字符串的超集。 2)、offset偏移 3)、count长度 注:String的真实内容由offset和count进行定位和截取。 二)、字符串的特性 1)、不变性 当一个对象被多线程共享,并且频繁使用时 ,可以
阅读全文
摘要:一)、缓冲 作用:缓解程序上下层之间的性能差异。 1)、当上层组件的性能优于下层组件时加入缓冲机制可以减少上层组件对下 层组件的等待时间。 2)、上层组件不需要等待下层组件接收全部数据,即可返回操作,加快了上 层组件的处理速度。 缓冲的应用: JDK的I/O组件提供了缓冲功能。 例:当对文件进行写操
阅读全文