前言:
线程的应用场景较为广泛,掌握线程相关的知识是必不可少。限制于篇幅很多概念不过多深入,后续再逐步完善。有遗漏和希望补充的欢迎留言。
线程基本方法
线程相关的基本方法有 wait,notify,notifyAll,sleep,join,yield 等
JAVA锁
锁分类:乐观锁、悲观锁、自旋锁、偏向锁、Synchronized 同步锁、可重入锁、公平锁与非公平锁
共享锁和独占锁、ReadWriteLock 读写锁、重量级锁、轻量级锁、分段锁。
CAS:
CAS(Compare And Swap/Set)比较并交换,CAS 算法的过程是这样:它包含 3 个参数 CAS(V,E,N)。V 表示要更新的变量(内存值),E 表示预期值(旧的),N 表示新值。当且仅当 V 值等
于 E 值时,才会将 V 的值设为 N,如果 V 值和 E 值不同,则说明已经有其他线程做了更新,则当 前线程什么都不做。最后,CAS 返回当前 V 的真实值。
CAS 操作是抱着乐观的态度进行的(乐观锁),它总是认为自己可以成功完成操作。当多个线程同时 使用 CAS 操作一个变量时,只有一个会胜出,并成功更新,其余均会失败。失败的线程不会被挂 起,仅是被告