thread
文章平均质量分 61
线程相关的知识
古笑来
愿今日之所作,可为君行一时方便!
展开
-
java中两种锁的对比
reentrentLock 、synchronized区别?相似点:阻塞式同步,线程阻塞和唤醒的代价是比较高,需要在用户态与内核态之间来回切换。使用方法不同:Synchronized是java的关键字,可以用在静态方法,非静态方法、代码块、对象上。renentrentLock是jdk的api,lock和unlock需要try、finally配合使用。锁性质上不同:synchronized的锁是非公平锁,ReentrantLock默认情况下也是非公平锁,但指定公平和非公平。等待阻塞中断不同:synch原创 2021-10-22 09:19:06 · 438 阅读 · 0 评论 -
java世界中的锁
你都知道那些锁?悲观锁 : 总是假设最坏的情况,每次取数据时都认为其他线程会修改,所以都会加(悲观)锁。一旦加锁,不同线程同时执行时,只能有一个线程执行,其他的线程在入口处等待,直到锁被释放。乐观锁:乐观锁顾名思义就是在操作时很乐观,认为操作不会产生并发问题(不会有其他线程对数据进行修改),因此不会上锁。但是在 更新 时会判断其他线程在这之前有没有对数据进行修改,一般会使用版本号机制或CAS(compare and swap)算法实现。排他锁 :如果事务T对数据A加上排他锁后,则其他事务不能再对A加任原创 2021-10-22 09:16:29 · 48 阅读 · 0 评论 -
线程各状态
五大状态、两大队列线程中的五中状态,对应cpu的状态sleep:睡join:主程序中可以将子线程join 回来,然后都在主程序中运行 shutDownyield:让出cpu一次wait:先拿到锁,在让出锁,并等待唤醒await:先拿到锁,在让出锁,并等待唤醒notify:唤醒sainal:唤醒wait 前提先拿到锁 等待并释放锁notify notifyAll 前提先拿到锁 再唤醒其他的线程,自己同时也可以不释放这个锁,当notify这个所在的方法执行完之后才会去唤醒。notify原创 2021-10-22 09:15:31 · 120 阅读 · 0 评论 -
java线程中的信号量
countDownLatch门栓,只能同步一次cyclicbarrier循环栅栏,循环同步semaphore信号量,有借有还原创 2021-10-21 20:24:25 · 107 阅读 · 0 评论 -
renentrentLock
renentrentLock的原理是怎样的?底层实现了aqsaqs是什么abstractQueuedSynchronizer 它是java线程的同步框架,jdk中很多锁工具都实现了它。在aqs中维护了一个state信号量和一个线程组成的双线链表队列,这个线程队列就是用来个给线程排队的,state就想一个红绿灯,用来控制线程排队或者放行,在不同场景下,有同的意义。可重入锁,state 就是用来表是加锁的次数。0表是无所,加锁state就加一,释放就减一。这个变量的改变是通过cas来改变的。juc中大量原创 2021-10-21 20:23:42 · 146 阅读 · 0 评论 -
线程池 threadpool
为什么使用线程池使用线程池的好处是减少在创建和销毁线程上所花的时间,限制系统资源的开销,解决资源不足的问题;如果不使用线程池,有可能造成系统大量创建同类线程而导致消耗完内存或者“过度切换”的问题jdk中提供了几种线程池很多比较熟悉的是newCachedThreadPool()newSingleThreadExecutor()newFixedThreadPool(corePoolSize)newScheduledThreadPool(corePoolSize)他们底层都是创建threadPo原创 2021-10-21 20:21:44 · 143 阅读 · 0 评论 -
volatile
说一下volatilevolatile是java中修饰属性的关键字,是一种轻量级的同步机制:可以保证可见性,防止指令重排序,可以保证读写单操作的原子性 ,复合操作不能保证。 单操作的读写原子性很难证明,所以就别说了。volatile有那些特性,及原理可见性:MESI缓存一致性协议,解决多核CPU的情况下有多个一级缓存,保证缓存内部数据的一致,不让系统数据混乱。CPU嗅探是现代x86cpu的实现缓存一致性的方法,原来是锁总线,每个处理器通过嗅探在总线上传播的数据来检查自己缓存的值是不是过期了,保证可见性原创 2021-10-21 20:18:20 · 325 阅读 · 0 评论 -
线程相关面试题
同一个线程对象可以被启动两次?否join一个已经结束的线程,会怎样直接执行join下面的逻辑java怎么开启线程继承thread ; 实现runnable callable completableFuture ; 线程池怎么保真线程安全加锁synchronized jdk提供的各种锁synchronized和volatile区别synchronized是加锁的关键字;我觉得他和volatile没有可比性,倒是可以和reentranceLock比较一下。巴拉巴拉volatile是j原创 2021-10-21 19:55:59 · 66 阅读 · 0 评论 -
synchronized
synchronized 能保证可有原么? 能可见性: lock 会刷新 工作内存中共享变量的 值原子性: 只有一个线程可以进来有序性:防止重排序:只有一个线程可以进来,重排序也可以对象在内存中的存储布局为什么有对齐位长度不够8的倍数,会被补齐。 因为jvm在读8的倍数的时候会非常快,优化用的一个空对象的组成是多少字节对象头 = 8字节(markword) + 4字节(classpointer)但jvm默认开启了压缩,类型指针 是4个字节;如果关闭压缩那就是8字节头 = mark原创 2021-10-21 19:51:23 · 82 阅读 · 0 评论