随笔分类 - java / 并发编程
并发编程
摘要:高并发编程的好处 多线程可以给程序带来一下好处: 1.充分利用CPU资源 减少CPU的切换次数,减少CPU的空闲时间,从而最大程度的发挥CPU的运算能力。 2.加快用户的响应时间 在充分占用多的CPU运算能力的情况下,执行任务就会变得更快速,任务完成时间也就会变短,从而能加快响应时间。 3.可以是代
阅读全文
摘要:什么是程序 程序是电脑中安装的应用 就叫做程序,但是未启动它它只是存在于电脑中,只有我们打开它,它才会编程一个进程,也就是进程是程序在计算机中执行的活动。也就是当我们运行了 程序,就会会启动一个进程。也就是运行中的程序,才能是进程。显然 程序是 死的、静态的。 什么是进程 进程是操作系统分配系统资源
阅读全文
摘要:自旋锁 锁的四种状态 无所状态、偏向锁状态、轻量级锁状态、重量级锁状态。 偏向锁定义 大多数情况下,锁不仅不存在多线程竞争,而且总是由同一线程多次获得,为了让线程获得锁的代价更低而引入了偏向锁。无竞争时不需要进行CAS操作来加锁和解锁。 轻量级锁 通过CAS操作来加锁和解锁 重量级锁
阅读全文
摘要:Java 内存模型(JMM) 从抽象的角度来看,JMM 定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(Main Memory)中,每个线程都有一个私有的本地内存(Local Memory),本地内存中存储了该线程以读/写共享变量的副本。本地内存是 JMM 的一个抽象概念,并不真实
阅读全文
摘要:一、线程封闭 栈封闭,也就是局部变量表,每个线程单独拷贝一份到线程内存中 线程封闭,需要开发者自己实现,不靠谱 二、无状态的类 无任何成员变量的类,这种类一定是线程安全的。 三、让类不可变 1.加final关键字 2.不提供任何修改成员变量的入口。 3.volatile 不能保证线程安全,只能保证可
阅读全文
摘要:使用线程池带来的三个好处 第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中执行任务的时间,T3 销毁线程时间。 如果:T1 +
阅读全文
摘要:一、集合 Vector CopyOnWriteArrayList 和 CopyOnWriteArraySet ConcurrentSkipListSet 有序 Set 二、Map HashTable ConcurrentHashMap ConcurrentSkipListMap 有序 Map 三、队
阅读全文
摘要:AtomicInteger AtomicIntegerArray AtomicReference AtomicStampedReference AtomicMarkableReference AtomicIntegerFieldUpdater AtomicLongFieldUpdater Atomi
阅读全文
摘要:假定有两个操作 A 和 B,如果从执行 A 的线程来看,当另一个线程执行 B 时, 要么将 B 全部执行完,要么完全不执行 B,那么 A 和 B 对彼此来说是原子的。 synchronized 关键字是基于阻塞的锁机制,也就是说当一个线程拥有锁的时候, 访问同一资源的其它线程需要等待,直到该线程释放
阅读全文
摘要:一、Fork-Join 二、CountDownLatch 三、CyclicBarrier 四、Semaphore 五、Exchange 六、Callable、Future和FutureTask
阅读全文
摘要:本质原因是ThreadLocalMap中的ThreadLocal对象是一个软引用类型,弱引用类型在在触发gc时被回收,也就是将ThreadLocalMap中的key回收了,但是threadLocalMap中的value未被回收,对应的ThreadLocalMap中的entry只有value,而没有k
阅读全文
摘要:synchronized内置锁 对象锁和类锁: 对象锁是用于对象实例方法,或者一个对象实例上的,类锁是用于类的静态方法或者一个类的 class 对象上的。我们知道,类的对象实例可以有很多个,但是每个类只有一个 class 对象,所以不同对象实例的对象锁是互不干扰的,但是每个类只有一个类锁。 但是有一
阅读全文
摘要:Thread 和 Runnable 的区别 Thread 才是 Java 里对线程的唯一抽象,Runnable 只是对任务(业务逻辑)的抽象。 Thread 可以接受任意一个 Runnable 的实例并执行 启动线程的方式有: 1、X extends Thread;,然后 X.start 2、X i
阅读全文
摘要:高并发编程的意义、好处和注意事项 由于多核多线程的 CPU 的诞生,多线程、高并发的编程越来越受重视和关注。 多线程可以给程序带来如下好处。 (1)充分利用 CPU 的资源 从上面的 CPU 的介绍,可以看的出来,现在市面上没有 CPU 的内核不使用多线程并发机制的,特别是服务器还不止一个 CPU,
阅读全文
摘要:并行 我们举个例子,如果有条高速公路 A 上面并排有 8 条车道,那么最大的并行车辆就是 8 辆,此条高速公路 A 同时并排行走的车辆小于等于 8 辆的时候,车辆就可以并行运行。 CPU 也是这个原理,一个 CPU 相当于一个高速公路 A,核心数或者线程数就相当于并排可以通行的车道;而多个 CPU
阅读全文
摘要:CPU 时间片轮转机制 我们平时在开发的时候,感觉并没有受 cpu 核心数的限制,想启动线程就启动线程,哪怕是在单核 CPU 上,为什么?这是因为操作系统提供了一种 CPU 时间片轮转机制。 时间片轮转调度是一种最古老、最简单、最公平且使用最广的算法,又称 RR调度。每个进程被分配一个时间段,称作它
阅读全文
摘要:CPU 核心数和线程数的关系 多核心:也指单芯片多处理器( Chip Multiprocessors,简称 CMP),CMP 是由美国斯坦福大学提出的,其思想是将大规模并行处理器中的 SMP(对称多处理器)集成到同一芯片内,各个处理器并行执行不同的进程。这种依靠多个 CPU 同时并行地运行程序是实现
阅读全文
摘要:什么是进程和线程 进程是系统运行资源分配的最小单位 进程是操作系统进行资源分配的最小单位,其中资源包括:CPU、内存空间、磁盘 IO 等,同一进程中的多条线程共享该进程中的全部系统资源,而进程和进程之间是相互独立的。进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配
阅读全文