随笔分类 - Java高并发
摘要:10.1CountDownLatch 计数器 new CountDownLatch(2)countDownLatch.countDown(); //-1 countDownLatch.await();//当计数器为0时返回 和join之间的区别 不用等到子进程全部执行完毕之后再返回 是基于AQS实现
阅读全文
摘要:8.1介绍 线程池里面的线程是可以复用的 大量异步任务是线程池表现良好的性能 线程池提供了一种资源限制和管理的手段 线程池提供了许多可调参数和可扩展接口, 但是可以使用更加方便的Executors的工厂方法创建线程,不建议 8.2类图分析 Executors是一个工具类,提供了好多静态方法 线程池状
阅读全文
摘要:7.1ConcurrentLinkedQueue 线程安全的无界非阻塞队列,其底层数据结构使用单向链表实现,对于出队和入队操作使用CAS来实现线程安全 新元素会被插入队列的末尾 队列头获取元素 offer操作 添加一个元素 add操作 添加一个元素,底层使用offer() poll操作 删除一个元素
阅读全文
摘要:6.1LockSupport 跟wait()不同! 引入了一个许可证的概念。 void park()方法 检测此时的线程是否拥有许可证,有的话。就通过,没有的话就阻塞。 LockSupport.park():在哪儿调用就是检查哪个线程 void unpark(Thread thread)方法 Loc
阅读全文
摘要:5.1CopyOnWriteArrayList 读:都是旧数组里面的值 写:加ReetrantLock,然后复制一份,在复制的一份上修改;最后将复制的一份设置成主本。 源码就没必要看了,太简单了! 弱一致性问题 简单说就是,修改时,都是复制的。那么读的时候很可能读到修改之前的值,这就是弱一致性问题
阅读全文
摘要:JUC包提供了一系列的原子性操作类,这些类都是使用非阻塞算法CAS实现的,相比使用锁实现原子性操作在性能上有很大提高。 4.1原子变量操作类 AtomicInteger AtomicLong AtomicBoolean 内部是通过Unsafe类来实现的。 以AtomicLong为例子 递增和递减方法
阅读全文
摘要:2.1什么是多线程编程 我也不知道,哈哈哈,就是保证线程安全吧 2.2为什么要多线程编程 快呗 2.3Java中的线程安全问题 指:多个线程同时读写一个共享资源并且没有任何同步措施时,导致出现脏数据或者其它不可预见的结果的问题 2.4内存可见性问题 java内存模型:概念模型 所有的变量都放在主内存
阅读全文
摘要:1.1进程与线程 进程:系统进行资源分配和调度的基本单位 线程:CPU分配的基本单位 一个进程包含很多个线程 1.2线程的创建和运行 三种方式:实现Runnable接口、继承Thread类、使用FutureTask方式(实现Callable接口中的call方法) import java.util.c
阅读全文
摘要:锁优化及注意事项 4.1 有助于提高锁性能的几点建议 4.1.1 减少锁持有的时间 public synchronized void syncMethod(){ method1(); method2(); method3(); } 上述代码中假如只有method2需要加锁,那么就不用给整个方法加锁了
阅读全文
摘要:JDK并发包 3.1同步控制 synchronized、obj.wait()、obj.notify() 3.1.1关键字synchronized的功能扩展:重入锁 java.util.concurrent.locks.ReentrantLock类来实现的 手动加锁:lock.lock() 手动解锁:
阅读全文
摘要:Java并行程序基础 2.1有关线程必须知道的事 进程:系统进行资源分配和调度的基本单位,线程的容器;程序是指令、数据及其组织形式的描述,进程是程序的实体 线程:线程就是轻量级进程,是程序执行的最小单位。 使用多线程而不是多进程去并发程序的设计,是因为线程间的切换和调度的成本远远小于进程!!!! I
阅读全文
摘要:走进并行世界 1.1何去何从的并行计算 1.1.2摩尔定律 Linus Torvalds:Linux大佬:并行计算智能在图像处理和服务端编程两个领域使用,并且它在着两个领域有着广泛的使用,但是在其它任何地方,并行计算毫无建树! 概念:硬件每18个月性能翻一倍 很显然没有办到!!! 所以只能软件来凑了
阅读全文

浙公网安备 33010602011771号