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

石家庄网站推广排名博客网站做外贸可以吗

石家庄网站推广排名,博客网站做外贸可以吗,网络营销有什么方式,wordpress资源管理我们想要的是#xff1a;允许多个线程同时读#xff0c;但只要有一个线程在写#xff0c;其他线程就必须等待。 ReadWriteLock ReadWriteLock的作用#xff1a; 只允许一个线程写入#xff08;其他线程既不能写入也不能读取#xff09;#xff1b;没有写入时#xf…我们想要的是允许多个线程同时读但只要有一个线程在写其他线程就必须等待。 ReadWriteLock ReadWriteLock的作用 只允许一个线程写入其他线程既不能写入也不能读取没有写入时多个线程允许同时读提高性能。如何声明读写锁 private final ReentrantReadWriteLock lock new ReentrantReadWriteLock();private final Lock readLock lock.readLock();private final Lock writeLock lock.writeLock();运行下面的代码发现 读写锁并发的时候读的数据并不是写入的终态数据 package org.meituan.javalearn.thread;import lombok.SneakyThrows;import java.util.LinkedList; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantReadWriteLock;/*** projectName: codebetter* package: org.meituan.javalearn.thread* className: ReadWriteQueue* author: fangjiayueyuan* description: TODO* date: 2023/5/8 下午10:01* version: 1.0*/ public class ReadWriteQueue {public static void main(String[] args) throws InterruptedException {LinkedListThread threadPools new LinkedListThread();final ReadWriteTaskQueue taskQueue new ReadWriteTaskQueue();for(int i0;i199995;i){threadPools.add(new Thread(new Runnable() {SneakyThrowsOverridepublic void run() {System.out.println(taskQueue.getTask());}}));}Thread addThread new Thread(new Runnable() {Overridepublic void run() {for (int i 0; i 1005; i) {taskQueue.addTask(Theith task to be closed);}}});addThread.start(); // 读写锁无法进行wait和notify???for(Thread thread:threadPools){thread.start();}} } class ReadWriteTaskQueue{private final ReentrantReadWriteLock lock new ReentrantReadWriteLock();private final Lock readLock lock.readLock();private final Lock writeLock lock.writeLock();LinkedListString taskQueue new LinkedListString();public void addTask(String task){writeLock.lock();try{taskQueue.add(task);}finally {writeLock.unlock();}}public Integer getTask() throws InterruptedException {readLock.lock();try{while(taskQueue.isEmpty()){return 0;}return taskQueue.size();}finally {readLock.unlock();}}}最初写了一个类ReadWriteTaskQueue如下所示。队列可以实现增加任务和读取任务并打印的功能。但实际上这个类实际上两个功能都在写不是读写锁的应用场景。 package org.meituan.javalearn.thread; import lombok.SneakyThrows; import java.util.LinkedList; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantReadWriteLock;/*** projectName: codebetter* package: org.meituan.javalearn.thread* className: ReadWriteQueue* author: fangjiayueyuan* description: TODO* date: 2023/5/8 下午10:01* version: 1.0*/ public class ReadWriteQueue {public static void main(String[] args) throws InterruptedException {LinkedListThread threadPools new LinkedListThread();final ReadWriteTaskQueue taskQueue new ReadWriteTaskQueue();for(int i0;i15;i){threadPools.add(new Thread(new Runnable() {SneakyThrowsOverridepublic void run() {System.out.println(taskQueue.getTask());}}));}Thread addThread new Thread(new Runnable() {Overridepublic void run() {for (int i 0; i 5; i) {taskQueue.addTask(Theith task to be closed);}}});addThread.start(); // 读写锁无法进行wait和notify???for(Thread thread:threadPools){thread.start();}} } class ReadWriteTaskQueue{private final ReentrantReadWriteLock lock new ReentrantReadWriteLock();private final Lock readLock lock.readLock();private final Lock writeLock lock.writeLock();LinkedListString taskQueue new LinkedListString();public void addTask(String task){writeLock.lock();try{taskQueue.add(task);}finally {writeLock.unlock();}}public String getTask() throws InterruptedException {readLock.lock();try{while(taskQueue.isEmpty()){return None;}return taskQueue.remove();}finally {readLock.unlock();}} }注意ReadWriteLock看起来无法实现线程的协调如果需要做类似于发布-订阅这种模式的消息队列则需要通过Condition实现wait和notify来达到多线程协调的目的。 总结 使用ReadWriteLock可以提高读取效率 – ReadWriteLock只允许一个线程写入 – ReadWriteLock允许多个线程在没有写入时同时读取 – ReadWriteLock适合读多写少的场景。缺点 如果有线程正在读写线程需要等待读线程释放锁后才能获取写锁即读的过程中不允许写这是一种悲观的读锁。 StampedLock 乐观锁的意思就是乐观地估计读的过程中大概率不会有写入因此被称为乐观锁。悲观锁就是在读的过程中拒绝写入显然乐观锁的并发效率更高。但有可能造成读写不一致。因此需要增加一些代码来判断读的状态。 声明StampedLockprivate final StampedLock lock new StampedLock; 读锁需要判断读的时候有没有写入通过盖得“章”Stamp来判断 long stamp lock.tryOptimisticRead();// 先尝试使用乐观锁 if(!validate(stamp)) // 通过Stamp来判断顾名思义StampedLock 已经盖过章的lock stamp lock.readLock(); // 如果在读的时候进行了写入则需要悲观锁来读一遍 由于大概率读的时候不会写所以大概率都是走的乐观锁因此能提高并发 lock.unlockRead(stamp);// 记得关闭读锁写锁 long stamp lock.writeLock(); // 上写锁 lock.unlockWrite(stamp); // 关闭写锁使用StampedLock对上面的ReadWriteTaskQueue进行改造如下 class ReadWriteTaskQueue{private final StampedLock lock new StampedLock();LinkedListString taskQueue new LinkedListString();public void addTask(String task){ // 写锁long stamp lock.writeLock();try{taskQueue.add(task);}finally {lock.unlockWrite(stamp);}}public Integer getTask() throws InterruptedException {long stamp lock.tryOptimisticRead();if(!lock.validate(stamp)){try{stamp lock.readLock();while(taskQueue.isEmpty()){return 0;}return taskQueue.size();}finally {lock.unlockRead(stamp);}}return taskQueue.size();} }
http://www.w-s-a.com/news/104242/

相关文章:

  • 电子商务网站建设报告范文单位做网站怎么做
  • 优质的外国网站qq小程序在哪里打开
  • 商务网站建设与推广实训报告免费素材网站无水印
  • 外贸站seoapp开发公司历程概述
  • 沈阳网站推广¥做下拉去118cr陶瓷企业 瓷砖地板公司网站建设
  • 医院网站官方微信精神文明建设我做服装设计师的 求推荐资源网站
  • 微信网站建设需要那些资料昆明cms模板建站
  • 安庆网站建设兼职中企动力是500强吗
  • 网站排名优化技巧基于网站的网络营销方法有哪些
  • 摄影素材网站做知识问答的网站
  • 中小企业网站建设济南兴田德润电话门店管理系统软件排行
  • 昆明工程建设信息网站柳州网站建设公司哪家好
  • 如何分析网站关键词北京门户网站网址
  • 做网站与做游戏那个好网站域名怎么起
  • 有没有做cad单的网站银行网站建设方案视频
  • 和各大网站做视频的工作高校网站群管理系统
  • 中国建设人才服务信息网是正规网站怎么注销自己名下的公司
  • 网站开发新型技术那些网站做任务领q币
  • 海口手机网站建设wordpress微支付宝
  • 做公司网站需要几天深圳自定义网站开发
  • 做网站学多长时间可以学会推广软件公司
  • 网络网站设计培训长沙建站模板大全
  • 站群搭建移动端处理器天梯图
  • 岳池发展建设集团有限公司门户网站湛江seo咨询
  • 手机网站工具关键词排名是什么意思
  • 游民星空是谁做的网站沈阳网站托管公司
  • 做网站搭建需要什么人vs2017移动网站开发
  • 购物网站开发需要什么技术怎么查看网站是否备案
  • 学做电商那个网站好网站建设投票主题
  • 中卫网站推广网络营销毕业设计做网站大小有什么要求