网站更换服务器,江门模板建站系统,品牌建设赋能增效,网站在哪里设置域名一、高并发同步锁
#xff08;1#xff09;ThreadLocal
threadLocal为每个线程维护一个本地变量。 采用空间换时间#xff0c;它用于线程间的数据隔离#xff0c;为每一个使用该变量的线程提供一个副本#xff0c;每个线程都可以独立地改变自己的副本#xff0c;而不会…一、高并发同步锁
1ThreadLocal
threadLocal为每个线程维护一个本地变量。 采用空间换时间它用于线程间的数据隔离为每一个使用该变量的线程提供一个副本每个线程都可以独立地改变自己的副本而不会和其他线程的副本冲突。 ThreadLocal类中维护一个Map用于存储每一个线程的变量副本Map中元素的键为线程对象而值为对应线程的变量副本。
2Synchronized 与Lock
ReentrantLock 拥有Synchronized相同的并发性和内存语义此外还多了 锁投票定时锁等候和中断锁等候
ReentrantLock获取锁定与三种方式 1、 lock(), 如果获取了锁立即返回如果别的线程持有锁当前线程则一直处于休眠状态直到获取锁 2、tryLock(), 如果获取了锁立即返回true如果别的线程正持有锁立即返回false 3、tryLock(long timeout,TimeUnit unit) 如果获取了锁定立即返回true如果别的线程正持有锁会等待参数给定的时间在等待的过程中如果获取了锁定就返回true如果等待超时返回false 4、lockInterruptibly:如果获取了锁定立即返回如果没有获取锁定当前线程处于休眠状态直到或者锁定或者当前线程被别的线程中断
synchronized
在资源竞争不是很激烈的情况下偶尔会有同步的情形下synchronized是很合适的。原因在于编译程序通常会尽可能的进行优化synchronized另外可读性非常好不管用没用过多线程包的程序员都能理解。ReentrantLock
ReentrantLock提供了多样化的同步比如有时间限制的同步可以被Interrupt的同步synchronized的同步是不能Interrupt的等。在资源竞争不激烈的情形下性能稍微比synchronized差点点。但是当同步非常激烈的时候synchronized的性能一下子能下降好几十倍。而ReentrantLock确还能维持常态。
3Volatile和Synchronized Volatile和Synchronized四个不同点
粒度不同前者针对变量 后者锁对象和类 syn阻塞volatile线程不阻塞 syn保证三大特性volatile不保证原子性 syn编译器优化volatile不优化 要使 volatile 变量提供理想的线程安全必须同时满足下面两个条件 对变量的写操作不依赖于当前值。 该变量没有包含在具有其他变量的不变式中。
4CAS CAS是乐观锁技术当多个线程尝试使用CAS同时更新同一个变量时只有其中一个线程能更新变量的值而其它线程都失败失败的线程并不会被挂起而是被告知这次竞争中失败并可以再次尝试。
CAS有3个操作数内存值V旧的预期值A要修改的新值B。当且仅当预期值A和内存值V相同时将内存值V修改为B否则什么都不做。
5Java中Unsafe类详解 1、通过Unsafe类可以分配内存可以释放内存
类中提供的3个本地方法allocateMemory、reallocateMemory、freeMemory分别用于分配内存扩充内存和释放内存与C语言中的3个方法对应。
2、可以定位对象某字段的内存位置也可以修改对象的字段值即使它是私有的 3、挂起与恢复
将一个线程进行挂起是通过park方法实现的调用 park后线程将一直阻塞直到超时或者中断等条件出现。unpark可以终止一个挂起的线程使其恢复正常。整个并发框架中对线程的挂起操作被封装在 LockSupport类中LockSupport类中有各种版本pack方法但最终都调用了Unsafe.park()方法。
4、cas操作