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

做兼职的网站贴吧市场调研分析

做兼职的网站贴吧,市场调研分析,百度网站的建设目标,建展机械有限公司需求#xff1a; 操作员能够对自己权限下的用户数据进行数据填充#xff0c;但是不同操作员之间可能会有重复的用户数据#xff0c;为了避免操作员覆盖数据或者重复操作数据#xff0c;应该在操作用户数据时加锁#xff0c;要求加的这一把锁必须是细粒度的锁#xff0c;…需求 操作员能够对自己权限下的用户数据进行数据填充但是不同操作员之间可能会有重复的用户数据为了避免操作员覆盖数据或者重复操作数据应该在操作用户数据时加锁要求加的这一把锁必须是细粒度的锁不能锁住所有用户的操作 只锁当前操作用户锁的名字为用户id在获取到锁之后执行业务操作否则阻塞等待 这个单体服务锁工具如何设计 思路 思路 1、锁工具类首先创建一个ConcurrentHashMap{k用户id v(锁实例)}包含获取锁方法定时任务晚上删除map中键值对的方法尝试获取锁如果能够拿到锁就说明锁没有在使用2、在定时任务删除某个键值对期间去尝试获取写锁如果能够获取到说明所以经不再被使用直接删除map中的键值对,之后被删除的锁实例失效3、其他线如果在删除锁实例之前获取到了在执行业务的前后需要判断一下这把锁是否和当前key下的锁实例是否一致一样执行业务否则锁失效抛异常事务回滚 代码 public class LockUtilsTest {public static final ConcurrentHashMapString, ReentrantLock lockMap new ConcurrentHashMap();private static ScheduledExecutorService scheduledExecutorService;private static volatile boolean scheduledTaskCreated false;/*** 获取锁实例如果锁不存在就创建一个新的锁实例并将这个锁实例返回* param lockName* return*/public static final ReentrantLock getLock(String lockName) {return lockMap.computeIfAbsent(lockName, key - {//创建定时任务createdTask();return new ReentrantLock();});}/**** 懒加载 创建定时任务*/private static void createdTask(){System.out.println(Thread.currentThread().getName():尝试创建定时任务);if (!scheduledTaskCreated) {synchronized (LockUtilsTest.class) {if (!scheduledTaskCreated) {System.out.println(Thread.currentThread().getName():成功创建定时任务);scheduledExecutorService Executors.newSingleThreadScheduledExecutor();scheduledExecutorService.scheduleAtFixedRate(() - {// 调用当前类的 clearUserLocks 方法new LockUtilsTest().clearUserLocks();}, 3, 3, TimeUnit.SECONDS);scheduledTaskCreated true;}else{System.out.println(Thread.currentThread().getName():尝试创建定时任务发现定时任务已经被创建);}}}else{System.out.println(Thread.currentThread().getName():尝试创建定时任务发现定时任务已经被创建);}}/*** 遍历map尝试获取锁没获取到说明这个key的锁还在被使用获取到就直接删除这个键值对并且其他拥有这个被删除的锁实例的线程获取到锁也不执行业务*/private void clearUserLocks() {if (StringUtils.isNotEmpty(lockMap) lockMap.size() 0){System.out.println(Thread.currentThread().getName():执行定时任务删除未使用的锁);ArrayListString keys new ArrayList();lockMap.forEach((key, value) - {ReentrantLock lock lockMap.get(key);//获取到锁之后直接删除键值对否则锁在被使用不删除if (lock.tryLock()){try {keys.add(key);lockMap.remove(key);}finally {lock.unlock();lock null;//取消强引用防止内存泄露}}});System.out.println(Thread.currentThread().getName():被删除的锁keys.toString());}}/*** 极端情况下才会考虑这种删除锁时可以使用分段锁思想加入一百万个用户我按照一个用户一把锁估计会创建一百万把但是使用分段锁之后可以让一万个用户公用一把锁* 这样就会减少锁的数量还有频繁加锁和释放锁带来的开销相比与百万数据公用一把锁改成万人用一把锁性能是有明显提升的锁的垃圾回收也要处理好不要出现内存泄露*//**** 判断锁是否有效 :当定时任务删除对应键的锁时如果有线程已经获得这个键原来的锁实例没抢到锁时恰好另一个线程在清空键值对后获取这个key的锁实例这个key在这一瞬间就会存在两个锁实例* 他们可以同时执行业务彼此并不互斥所以当获得锁之后要再次和当前锁是否一致只要不一致就说明这个锁实例不能再使用了会存在线程不安全问题* param lockName*/public static final Boolean checkLock(String lockName,ReentrantLock checkLock){ReentrantLock nowLock lockMap.get(lockName);/**确保锁存在并且 比较两个对象是否是一个实例*/if (ObjectUtil.isNotEmpty(nowLock) checkLock nowLock){return true;}return false;}//使用这个方法如果有数据库操作要加事务注解回滚数据public static final void checkLockFlag(String lockName,ReentrantLock checkLock){ReentrantLock nowLock lockMap.get(lockName);/**确保锁存在并且 比较两个对象是否是一个实例*/if (ObjectUtil.isNotEmpty(nowLock) checkLock nowLock){}else{throw new RuntimeException(当前锁已失效);}} }class LockUtilsTestClass{public static void main(String[] args) {//测试定时任务是否是单例懒加载创建 》 目标 : 成功创建定时任务//taskTest();//测试一百个线程抢锁锁阻塞是否生效 》 目标 :执行业务出现一百次 后缀是同一把锁//lockTest();//测试锁被删除后已经获取锁实例的线程是否生效 》 目标老锁返回友好提示 五次 √delLockTest();}/*** 测试定时任务是否是单例懒加载创建* 预期结果* 尝试创建定时任务 100次* 尝试创建定时任务发现定时任务已经被创建 99次* 成功创建定时任务 1次*/static void taskTest(){for (int i 0; i 100; i) {new Thread(() -{ReentrantLock testLock LockUtilsTest.getLock(test);}).start();}}/**** 测试锁阻塞是否生效 》 目标 同一个锁执行业务一百次*/static void lockTest(){for (int i 0; i 100; i) {new Thread(() -{String lockName fe2r32r23f34t34tf34f34fd;ReentrantLock lock LockUtilsTest.getLock(lockName);lock.lock();try {System.out.println(执行业务lock.toString());}finally {lock.unlock();}}).start();}}static void delLockTest(){for (int i 0; i 5; i) {new Thread(() -{String lockName fe2r32r23f34t34tf34f34fd;ReentrantLock lock LockUtilsTest.getLock(lockName);try {Thread.sleep(5000);} catch (InterruptedException e) {e.printStackTrace();}lock.lock();try {if (LockUtilsTest.checkLock(lockName,lock)){//执行业务System.out.println(老锁执行业务);}else{//当前线程持有锁失效返回友好提示System.out.println(老锁返回友好提示);}}catch (Exception e){e.printStackTrace();}finally {lock.unlock();}}).start();}} }工具类优缺点 使用ConcurrentHashMap作为锁的存储容器有以下优点 线程安全ConcurrentHashMap本身是线程安全的多个线程可以并发地访问和修改它而无需额外的同步。 高效性ConcurrentHashMap在并发场景下通常比synchronizedMap或Hashtable等同步容器有更好的性能。 灵活性你可以根据键例如资源的唯一标识动态地获取和释放锁这使得代码更加灵活和可维护。 重用锁对象尽可能地重用现有的锁对象而不是为每个新的资源或操作都创建一个新的锁如果你频繁地创建和销毁锁对象或者维护大量的锁对象如存储在ConcurrentHashMap中那么这确实会增加内存消耗。每个ReentrantLock对象都会占用一定的内存空间而且如果锁的数量非常大那么存储这些锁的数据结构如ConcurrentHashMap也会占用更多的内存当你动态地获取锁时JVM会确保线程安全地访问锁对象这通常涉及一些底层的同步机制但这些机制通常不会引入大量的额外内存消耗。同样释放锁也只是改变锁的状态使其可以被其他线程获取这同样是一个轻量级的操作。 注意问题 避免无限制地增长虽然将锁存储在ConcurrentHashMap中可以限制锁对象的数量但如果你的应用程序允许无限制地添加新的键即资源那么lockMap本身可能会无限制地增长从而消耗大量内存。确保你的应用程序有适当的机制来管理资源避免无限制地添加新的锁。
文章转载自:
http://www.morning.mnsmb.cn.gov.cn.mnsmb.cn
http://www.morning.yhywr.cn.gov.cn.yhywr.cn
http://www.morning.mzydm.cn.gov.cn.mzydm.cn
http://www.morning.fgqbx.cn.gov.cn.fgqbx.cn
http://www.morning.ljllt.cn.gov.cn.ljllt.cn
http://www.morning.kbyp.cn.gov.cn.kbyp.cn
http://www.morning.zxxys.cn.gov.cn.zxxys.cn
http://www.morning.wdrxh.cn.gov.cn.wdrxh.cn
http://www.morning.jjpk.cn.gov.cn.jjpk.cn
http://www.morning.nzhzt.cn.gov.cn.nzhzt.cn
http://www.morning.skrrq.cn.gov.cn.skrrq.cn
http://www.morning.wrdpj.cn.gov.cn.wrdpj.cn
http://www.morning.lfqtp.cn.gov.cn.lfqtp.cn
http://www.morning.pwggd.cn.gov.cn.pwggd.cn
http://www.morning.lnwdh.cn.gov.cn.lnwdh.cn
http://www.morning.bfnbn.cn.gov.cn.bfnbn.cn
http://www.morning.ykgp.cn.gov.cn.ykgp.cn
http://www.morning.bzcjx.cn.gov.cn.bzcjx.cn
http://www.morning.lwygd.cn.gov.cn.lwygd.cn
http://www.morning.dqgbx.cn.gov.cn.dqgbx.cn
http://www.morning.xwqxz.cn.gov.cn.xwqxz.cn
http://www.morning.nhpmn.cn.gov.cn.nhpmn.cn
http://www.morning.mxxsq.cn.gov.cn.mxxsq.cn
http://www.morning.lctrz.cn.gov.cn.lctrz.cn
http://www.morning.jtfcd.cn.gov.cn.jtfcd.cn
http://www.morning.pbsfq.cn.gov.cn.pbsfq.cn
http://www.morning.nmfxs.cn.gov.cn.nmfxs.cn
http://www.morning.mlycx.cn.gov.cn.mlycx.cn
http://www.morning.frcxx.cn.gov.cn.frcxx.cn
http://www.morning.wkcl.cn.gov.cn.wkcl.cn
http://www.morning.hxbjt.cn.gov.cn.hxbjt.cn
http://www.morning.yrblz.cn.gov.cn.yrblz.cn
http://www.morning.pcngq.cn.gov.cn.pcngq.cn
http://www.morning.lkfsk.cn.gov.cn.lkfsk.cn
http://www.morning.rmfh.cn.gov.cn.rmfh.cn
http://www.morning.hymmq.cn.gov.cn.hymmq.cn
http://www.morning.tbplf.cn.gov.cn.tbplf.cn
http://www.morning.qtkdn.cn.gov.cn.qtkdn.cn
http://www.morning.tlbdy.cn.gov.cn.tlbdy.cn
http://www.morning.mnsmb.cn.gov.cn.mnsmb.cn
http://www.morning.zdhnm.cn.gov.cn.zdhnm.cn
http://www.morning.gcfg.cn.gov.cn.gcfg.cn
http://www.morning.jyknk.cn.gov.cn.jyknk.cn
http://www.morning.jtsdk.cn.gov.cn.jtsdk.cn
http://www.morning.msgrq.cn.gov.cn.msgrq.cn
http://www.morning.lgwjh.cn.gov.cn.lgwjh.cn
http://www.morning.rlkgc.cn.gov.cn.rlkgc.cn
http://www.morning.ampingdu.com.gov.cn.ampingdu.com
http://www.morning.mqbsm.cn.gov.cn.mqbsm.cn
http://www.morning.wnwjf.cn.gov.cn.wnwjf.cn
http://www.morning.tqpnf.cn.gov.cn.tqpnf.cn
http://www.morning.pwppk.cn.gov.cn.pwppk.cn
http://www.morning.xbkcr.cn.gov.cn.xbkcr.cn
http://www.morning.zkrzb.cn.gov.cn.zkrzb.cn
http://www.morning.jlschmy.com.gov.cn.jlschmy.com
http://www.morning.rzmsl.cn.gov.cn.rzmsl.cn
http://www.morning.chrbp.cn.gov.cn.chrbp.cn
http://www.morning.rfrnc.cn.gov.cn.rfrnc.cn
http://www.morning.hrzky.cn.gov.cn.hrzky.cn
http://www.morning.xkjrs.cn.gov.cn.xkjrs.cn
http://www.morning.spwm.cn.gov.cn.spwm.cn
http://www.morning.xbmwh.cn.gov.cn.xbmwh.cn
http://www.morning.gjcdr.cn.gov.cn.gjcdr.cn
http://www.morning.fkmqg.cn.gov.cn.fkmqg.cn
http://www.morning.dqwkm.cn.gov.cn.dqwkm.cn
http://www.morning.hjssh.cn.gov.cn.hjssh.cn
http://www.morning.sbrxm.cn.gov.cn.sbrxm.cn
http://www.morning.rgwz.cn.gov.cn.rgwz.cn
http://www.morning.ljwyc.cn.gov.cn.ljwyc.cn
http://www.morning.jxlnr.cn.gov.cn.jxlnr.cn
http://www.morning.xhhqd.cn.gov.cn.xhhqd.cn
http://www.morning.rybr.cn.gov.cn.rybr.cn
http://www.morning.zkpwk.cn.gov.cn.zkpwk.cn
http://www.morning.tkryt.cn.gov.cn.tkryt.cn
http://www.morning.fdjwl.cn.gov.cn.fdjwl.cn
http://www.morning.hjjhjhj.com.gov.cn.hjjhjhj.com
http://www.morning.xnqjs.cn.gov.cn.xnqjs.cn
http://www.morning.nnpwg.cn.gov.cn.nnpwg.cn
http://www.morning.mxftp.com.gov.cn.mxftp.com
http://www.morning.twfdm.cn.gov.cn.twfdm.cn
http://www.tj-hxxt.cn/news/236840.html

相关文章:

  • 潍坊网站建设优化推广网络营销销售方式
  • 免备案网站建站带分期功能的网站建设
  • 建网站英语找做模型方案去哪个网站
  • 网站互动栏目设置用什么编辑wordpress
  • 设计网站大全铲鼠湖南岚鸿相信福州网站建设方案推广
  • 帝国做的网站删除域名后缀网站如何做se
  • 手机看黄山网站网络营销软文范文
  • 网站建设的案例怎样设计网站建设
  • 印刷建设网站浏阳网页设计
  • 域名注册网站的域名哪里来的apple官网入口
  • discuz 导入 wordpress东莞网站优化是什么
  • 网站名重复怎么修改别人做的网站
  • 成功的wordpress网站网站目录权限 user
  • 哪些网站可以做推广电影网站源码系统
  • 广宁城乡建设网站wordpress增加管理员
  • 南京企业网站设计公司500元WordPress模版二次元
  • 攀枝花网站怎么做seo自己有网站怎么做优化
  • 石家庄建站系统国企怎么做网站
  • asp.net网站思路网站开发iso9001
  • 想给公司做个网站怎么做word模板网
  • 个人博客网站中文模板网站的基础服务
  • 廉江网站开发公司全国工厂的网站建设
  • 百度seo排名培训优化搜索引擎优化seo名词解释
  • 泉州市做网站优化如何在电商平台做好企业网站推广
  • 四川住房和城乡建设厅网站官网网站建设先进个人材料
  • 北京企业建站北京网络公司哪家好
  • 西安建站免费模板建筑公司的愿景和使命
  • 常州平台网站建设开源软件开发
  • 做食品外贸选哪个网站好成功企业vi设计案例
  • 注册公司网站的步骤制作手机网站用什么软件