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

企业网页设计网站案例石家庄发布最新消息

企业网页设计网站案例,石家庄发布最新消息,番禺高端网站建设公司哪家好,推广营销是什么意思首先说结论#xff0c;在分布式系统中#xff0c;单纯使用 Java 中的 synchronized 关键字是无法满足需求的#xff0c;下面从 synchronized 的作用原理、在分布式场景下的局限性以及替代方案等方面详细分析。 一、synchronized 的作用原理 在 Java 中#xff0c;synchron…        首先说结论在分布式系统中单纯使用 Java 中的 synchronized 关键字是无法满足需求的下面从 synchronized 的作用原理、在分布式场景下的局限性以及替代方案等方面详细分析。 一、synchronized 的作用原理 在 Java 中synchronized 关键字用于实现线程同步它可以保证在同一时刻只有一个线程能够访问被 synchronized 修饰的代码块或方法。其本质是通过获取对象的监视器monitor来实现互斥访问这是基于 JVM 层面的同步机制作用范围仅限于单个 JVM 进程内。 以下是一个简单的 synchronized 使用示例 public class SynchronizedExample {private int count 0;public synchronized void increment() {count;}public static void main(String[] args) throws InterruptedException {SynchronizedExample example new SynchronizedExample();Thread t1 new Thread(() - {for (int i 0; i 1000; i) {example.increment();}});Thread t2 new Thread(() - {for (int i 0; i 1000; i) {example.increment();}});t1.start();t2.start();t1.join();t2.join();System.out.println(Count: example.count);} } 在这个示例中increment 方法被 synchronized 修饰确保了在同一时刻只有一个线程能够执行该方法从而避免了多线程环境下的竞态条件。 二、在分布式场景下的局限性 分布式系统由多个独立的 JVM 进程组成不同进程之间无法直接共享对象的监视器。synchronized 只能保证单个 JVM 内的线程同步无法实现跨 JVM 进程的同步。因此在分布式系统中如果多个进程同时访问共享资源使用 synchronized 无法保证资源的互斥访问可能会导致数据不一致等问题。 三、分布式系统中的替代方案 为了实现分布式环境下的同步可以使用以下几种常见的方案 1.数据库锁 可以利用数据库的行级锁或表级锁来实现分布式锁。例如在 MySQL 中可以使用 SELECT ... FOR UPDATE 语句来获取行级锁。 -- 获取行级锁 SELECT * FROM distributed_lock_table WHERE lock_name resource_lock FOR UPDATE; 这种方式的优点是实现简单不需要额外的组件缺点是性能较差对数据库的依赖较大。 2.Redis 分布式锁——SETNX Redis 是一个高性能的键值存储系统可以利用 Redis 的原子操作来实现分布式锁。常见的实现方式是使用 SETNXSET if Not eXists命令。 import redis.clients.jedis.Jedis;public class RedisDistributedLock {private static final String LOCK_KEY distributed_lock;private static final String LOCK_VALUE lock_value;private static final int EXPIRE_TIME 1000; // 锁的过期时间单位毫秒public static boolean acquireLock(Jedis jedis) {String result jedis.set(LOCK_KEY, LOCK_VALUE, NX, PX, EXPIRE_TIME);return OK.equals(result);}public static void releaseLock(Jedis jedis) {jedis.del(LOCK_KEY);}public static void main(String[] args) {Jedis jedis new Jedis(localhost, 6379);if (acquireLock(jedis)) {try {// 执行临界区代码System.out.println(获取到锁执行临界区代码);} finally {releaseLock(jedis);}} else {System.out.println(未获取到锁);}jedis.close();} } 这种方式的优点是性能高实现相对简单缺点是需要额外的 Redis 服务并且需要处理锁的过期时间和异常情况。 3.Redis 分布式锁——TryLock 事实上Redis 实现 TryLock 也要依靠 SET 命令的原子性通过设置特定的键值对以及过期时间来模拟锁的获取和释放。当执行 SET 命令时如果键不存在则设置成功相当于获取到锁若键已存在则设置失败代表锁已被其他客户端持有。 以下是使用 Jedis实现 tryLock 功能的示例代码 import redis.clients.jedis.Jedis;public class RedisTryLockExample {private static final String LOCK_KEY distributed_lock;private static final String LOCK_VALUE lock_value;private static final int EXPIRE_TIME 10000; // 锁的过期时间单位毫秒private Jedis jedis;public RedisTryLockExample() {this.jedis new Jedis(localhost, 6379);}/*** 尝试获取锁* return 如果获取到锁返回 true否则返回 false*/public boolean tryLock() {// 使用 SET 命令的 NXNot eXists和 PX过期时间选项String result jedis.set(LOCK_KEY, LOCK_VALUE, NX, PX, EXPIRE_TIME);return OK.equals(result);}/*** 释放锁*/public void unlock() {jedis.del(LOCK_KEY);}public static void main(String[] args) {RedisTryLockExample lockExample new RedisTryLockExample();if (lockExample.tryLock()) {try {// 模拟执行临界区代码System.out.println(获取到锁执行临界区代码);Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();} finally {lockExample.unlock();System.out.println(释放锁);}} else {System.out.println(未获取到锁);}lockExample.jedis.close();} } 比较SETNX和TryLock SETNX 的问题使用 SETNX 命令设置锁时无法原子性地设置锁的过期时间。若在设置完锁之后在设置过期时间之前客户端发生异常崩溃就会导致锁无法释放造成死锁。SETNX只是单纯地判断键是否存在并进行设置对于锁的过期时间等额外属性需要额外的命令来处理在实现分布式锁时需要编写更多的代码来保证正确性代码的可读性和可维护性较差。功能相对单一仅能实现键的存在性判断和设置操作。 TryLock 实现的优势使用 SET 命令并结合 NX 和 PX/EX 选项可以原子性地完成锁的设置和过期时间的设置避免了上述死锁问题。从功能语义上来说TryLock 更符合锁的使用习惯调用者可以直观地理解其作用是尝试获取锁并且能够方便地结合过期时间等参数进行使用代码逻辑更加清晰。TryLock基于 SET 命令可以利用 Redis 提供的更多特性例如可以设置不同的过期时间单位PX 表示毫秒EX 表示秒还可以结合其他命令实现更复杂的分布式锁逻辑如可重入锁等。 四、总结 综上所述在分布式系统中不能直接使用 synchronized 来实现同步需要根据具体的业务场景选择合适的分布式锁方案。
http://www.lakalapos1.cn/news/35514/

相关文章:

  • 餐饮设计网站建设淘客联盟做任务网站
  • 怎样找竞争对手网站鞋帽网站欣赏
  • 广州专业的免费建站wordpress模板电影
  • WordPress积分提现插件乐陵市seo关键词优化
  • 手机网站生产app网站建设与管理学习收获
  • 网站开发是什么专业九江网站建设哪家好
  • 网站开发电话曲阜公司网站建设价格便宜
  • wordpress网站用户共享网站程序定制开发流程
  • 北京住房与建设部网站iis建立好网站 怎么打开
  • 音乐版权购买网站本地建网站的详细步骤
  • 外贸网站怎么营销做外贸都有哪些网站
  • 网站建设合同封面模板下载备案的域名拿来做别的网站
  • 做app必须有网站ajax 效果网站
  • 营销型网站 开源程序网络舆情监测
  • 苏州网站建设基础型服装生产厂商网站建设方案
  • 丹灶网站建设公司笑话 wordpress主题
  • 网络建站免费网址长沙网站设计建设
  • 做网站还得买域名吗wordpress下载页面
  • 企业网站建设的本质及特点wordpress首页模板标签
  • 潍坊市做网站帮小公司代账一个月费用
  • 百度网络优化上海百度seo
  • 网站互动栏目设置常德市做网站联系电话
  • 网站管理系统安装便宜网站空间
  • 哪里可以做公司网站微信小程序开发实训报告
  • 个人建站网页制作软件html代码编辑器
  • 济南企业做网站推广网站怎么用云服务器做网站
  • 自己的卡盟网站怎么做分站怀化 优化营商环境
  • 襄樊网站建设自己个人网站后台怎么做
  • 广东网站建设十大品牌网站开发语言的选择
  • 网站建设代码实例望城建设局网站