多线程
java_爱吃肉
少走弯路
展开
-
synchronize和valotile区别
valotile 修饰类变量、类实例时,在并发中,会及时直接写在主存中,不会拷贝副本到工作内存;禁止对有关联的语句进行重排,即有序----有可见性、有序性、无原子性;(未加这个修饰的变量修改时,会把工作区修改了,但同步至主内存不一定是实时;如果有valotile在工作区修改完,立刻同步至主内存)synchronized修饰类变量、类实例时,在并发中,先清空工作内存,从主存拷贝变量副本到工作内...原创 2019-12-21 15:56:57 · 649 阅读 · 0 评论 -
StampedLock、ReentrantLock、ReentrantReadWriteLock以及synchronized的比较,还有valotile
4种锁,并发量不是特别大且最稳定是内置synchronized锁(并不是完全被替代),当并发量大且读远大于写的情况下最快的的是StampedLock锁(乐观读。近似于无锁)。建议大家采用。1)synchronized:重入锁同步锁--适用于并发量不是特别大的情况下,性能中等且稳定2)ReentrantLock:可重入互斥锁,分为“公平锁”和“非公平锁”。--性能中等,建议需要手动操作...原创 2019-12-21 15:55:40 · 199 阅读 · 0 评论 -
线程的创建5大类方法汇总
public void run() { System.out.println("test"); } 1 Thread及其子类创建:线程的创建、任务、启动(Thread继承了Runnable接口的run) new Thread(){@Override public void run() {System.out.println("test")...原创 2019-12-21 15:52:42 · 155 阅读 · 0 评论 -
如何避免死锁
1)避免死锁最简单的方法就是阻止循环等待条件,将系统中所有的资源设置标志位、排序,规定所有的进程申请资源必须以一定的顺序(升序或降序)做操作来避免死锁2)死锁避免的基本思想:系统对进程发出的每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源,如果分配后系统可能发生死锁,则不予分配,否则予以分配,这是一种保证系统不进入死锁状态的动态策略。...原创 2019-12-21 15:50:40 · 266 阅读 · 0 评论 -
线程和进程区别
官方: 进程是资源分配的最小单位,线程是程序执行的最小单位。(由系统进行资源的分配和调度的最小单位,进程之间相互独立;) 进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。...原创 2019-12-21 15:49:18 · 115 阅读 · 0 评论 -
原子性和一致性的区别是什么?
概念原子性:一个事务内的操作,要么同时成功,要么同时失败一致性:一个事务必须使数据库从一个一致性状态变换到另一个一致性状态,比如,A转给B,A减钱,B没有加上,就没有一致性对于一致性,知乎链接中内容如下:从这段话的理解来看,所谓一致性,即,从实际的业务逻辑上来说,最终结果是对的、是跟程序员的所期望的结果完全符合的重点一致性是基础,也是最终目的,其他三个特性(原子性...原创 2019-12-21 15:48:20 · 2327 阅读 · 0 评论