当前位置: 首页 > wzjs >正文

广西做网站的公司有哪些艺术字生成器在线制作

广西做网站的公司有哪些,艺术字生成器在线制作,线上网站建设需求,网站建设中正在为您转在 Java 并发编程中,锁(Lock)是保证线程安全的关键工具。本文将全面介绍 Java 的锁机制,包括 synchronized 关键字、Lock 接口及其实现、读写锁、乐观锁与悲观锁等,帮助新手理解 Java 并发控制。 1. Java 中的锁概述 …

在 Java 并发编程中,锁(Lock)是保证线程安全的关键工具。本文将全面介绍 Java 的锁机制,包括 synchronized 关键字、Lock 接口及其实现、读写锁、乐观锁与悲观锁等,帮助新手理解 Java 并发控制。

1. Java 中的锁概述

锁(Lock)用于控制多个线程对共享资源的访问。不同的锁机制可以提供不同的性能、可重入性、公平性和可中断性等特性。

2. synchronized 关键字

synchronized 是 Java 内置的同步机制,依赖于 Java 虚拟机(JVM)实现。

2.1 用法示例

public class SynchronizedExample {private int count = 0;public synchronized void increment() {count++;}
}

在上述示例中,increment 方法是同步方法,多个线程调用时会自动加锁,保证 count 变量的线程安全。

2.2 synchronized 作用范围

  • 同步实例方法:锁住当前实例(this)。
  • 同步静态方法:锁住类对象(Class)。
  • 同步代码块:可以锁定特定对象,提高并发性。
public void method() {synchronized (this) {// 代码块}
}

2.3 synchronized 的特性

  • 可重入性:一个线程获取锁后可以多次进入同步代码。
  • 不可中断:线程获取锁后,其他线程只能等待。
  • JVM 层面实现:使用 monitorentermonitorexit 指令。

3. Lock 接口(显式锁)

Lock 接口提供比 synchronized 更灵活的锁控制,主要实现类是 ReentrantLock

3.1 ReentrantLock 用法

import java.util.concurrent.locks.ReentrantLock;public class LockExample {private final ReentrantLock lock = new ReentrantLock();private int count = 0;public void increment() {lock.lock();try {count++;} finally {lock.unlock();}}
}

3.2 ReentrantLock 特性

  • 可重入性:和 synchronized 类似,一个线程可以多次获得相同的锁。
  • 可中断:支持 lockInterruptibly() 方法,中断等待锁的线程。
  • 公平锁和非公平锁:默认非公平锁,可选择公平锁保证线程按请求顺序获取锁。
ReentrantLock fairLock = new ReentrantLock(true); // 公平锁

4. ReadWriteLock(读写锁)

ReadWriteLock 提供读锁(多个线程可读)和写锁(独占)。

import java.util.concurrent.locks.ReentrantReadWriteLock;public class ReadWriteLockExample {private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();private int data = 0;public int read() {lock.readLock().lock();try {return data;} finally {lock.readLock().unlock();}}public void write(int value) {lock.writeLock().lock();try {data = value;} finally {lock.writeLock().unlock();}}
}

5. 乐观锁与悲观锁

5.1 悲观锁

认为竞争严重,每次访问资源都加锁(synchronizedLock)。

5.2 乐观锁

认为竞争较少,使用 CAS(Compare And Swap) 机制,比如 AtomicInteger

import java.util.concurrent.atomic.AtomicInteger;public class AtomicExample {private final AtomicInteger count = new AtomicInteger(0);public void increment() {count.incrementAndGet();}
}

6. StampedLock(改进的读写锁)

StampedLock 提供乐观读锁,提高并发性能。

import java.util.concurrent.locks.StampedLock;public class StampedLockExample {private final StampedLock lock = new StampedLock();private int data = 0;public int read() {long stamp = lock.tryOptimisticRead();int currentData = data;if (!lock.validate(stamp)) { // 检测数据是否被修改lock.readLock();try {currentData = data;} finally {lock.unlockRead(stamp);}}return currentData;}
}

7. ThreadLocal 变量

ThreadLocal 不是锁,而是让每个线程拥有自己的变量副本,避免锁竞争。

public class ThreadLocalExample {private static final ThreadLocal<Integer> threadLocal = ThreadLocal.withInitial(() -> 0);public void increment() {threadLocal.set(threadLocal.get() + 1);}
}

8. 选择合适的锁

锁类型特性适用场景
synchronizedJVM 层面,简单易用适合简单同步需求
ReentrantLock可中断、支持公平锁适合需要高级控制的场景
ReadWriteLock读写分离,提高并发读多写少的情况
StampedLock乐观读,提高性能适合高并发读的场景
ThreadLocal线程私有,无锁线程隔离数据

9. 总结

Java 提供了多种锁机制,每种锁都有其适用场景。synchronized 适用于简单同步,Lock 提供更多控制,ReadWriteLock 适用于读多写少的情况,StampedLock 提供乐观读锁以提高并发性能。此外,ThreadLocal 可用于无锁并发,避免数据竞争。


文章转载自:

http://GsX67vEK.wnzgm.cn
http://BbWwtkqr.wnzgm.cn
http://XBvUJcE2.wnzgm.cn
http://dKq5iFbg.wnzgm.cn
http://kLlaVUAj.wnzgm.cn
http://TvWd6EFR.wnzgm.cn
http://2tJMPeVI.wnzgm.cn
http://WjZh1Cxg.wnzgm.cn
http://5qcXxH9z.wnzgm.cn
http://yMGD6Bj0.wnzgm.cn
http://KgJSoBSO.wnzgm.cn
http://AWRzb2F3.wnzgm.cn
http://Hro90Bzw.wnzgm.cn
http://n96R7RLR.wnzgm.cn
http://X5fBTAP9.wnzgm.cn
http://degBH3N0.wnzgm.cn
http://p698aHnm.wnzgm.cn
http://Q9jFlLZd.wnzgm.cn
http://RI3ctBuV.wnzgm.cn
http://e1T0NHKe.wnzgm.cn
http://xCMNsZ8P.wnzgm.cn
http://LmckWSfJ.wnzgm.cn
http://tMWFhQKE.wnzgm.cn
http://JQj9Nktf.wnzgm.cn
http://dE7r1Pb4.wnzgm.cn
http://zlEfau6I.wnzgm.cn
http://jWgzf3b3.wnzgm.cn
http://xwd2q8ys.wnzgm.cn
http://xhtV9a85.wnzgm.cn
http://EhrNXsdk.wnzgm.cn
http://www.dtcms.com/wzjs/726878.html

相关文章:

  • 怎么看网站的ftp做seo网站
  • 网站开发有什么职位wordpress添加注册页面模板
  • 遂宁网站优化珠海模板开发建站
  • 做可转债好的网站如何添加网站代码
  • 网站建设个人关键词排名批量查询
  • 网站如何做原创智慧团建网站没有验证码
  • 可以做cps合作的棋牌网站盲盒小程序加盟
  • 网站图片速度企业门户网站设计报告
  • wikidot怎么建设网站wordpress好用的文件管理
  • 怎么用wordpress搭建企业网站四川成都设计公司
  • 岳阳市规划局建设工程公示网站重庆网站设计方案
  • 网站 团队布局网站建设
  • 电商建网站wordpress 音乐播放器 歌词
  • 网站首页权重华为净亏26亿
  • 安徽建设银行官方网站制作html网站模板
  • 渭南市住房和城乡建设局官方网站wordpress吗
  • 开封网站建设培训班招远网站建设价格
  • 免费网站建站排行榜国家建设工程注册管理中心网站
  • php门户网站源码抖音企业服务平台
  • 网站建设竞标书wordpress页面半透明
  • 婚介网站建设新闻资讯app开发
  • 珠海手机网站开发带会员系统的网站模板
  • 做社情网站犯法怎么办网站建设如何传视频
  • 网站在百度上做推广怎样做深圳腾网站建设
  • 昌吉网站建设咨询电话汕头网站制作网站
  • 制作短链接网站wordpress注册头像
  • 怎么做公众号网站吗私募基金网站开发流程
  • 网站建设的实验小结昆明体育城微网站建设
  • 专业seo网站优化公司全国企业信息公示系统查询
  • 唐山网站建设托管wordpress怎么增加菜单