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

企业网站建设方案新闻关键词挖掘工具爱网

企业网站建设方案新闻,关键词挖掘工具爱网,做电商网站,上海模板网站建站1.使用SynchronizedListSynchronizedList是一个线程安全的包装类。继承于SynchronizedCollection#xff0c;SynchronizedCollection实现了Collection接口#xff0c;SynchronizedList包含一个List对象#xff0c;对List的访问修改方法进行了一些封装#xff0c;在封装的方…1.使用SynchronizedListSynchronizedList是一个线程安全的包装类。继承于SynchronizedCollectionSynchronizedCollection实现了Collection接口SynchronizedList包含一个List对象对List的访问修改方法进行了一些封装在封装的方法中会对list使用同步锁加锁然后再进行存取和修改操作。使用方法如下LinkedList linkedList new LinkedList();//调用Collections的synchronizedList方法传入一个linkedList会返回一个SynchronizedList实例对象List synchronizedList Collections.synchronizedList(linkedList);//调用Collections的synchronizedList方法ArrayList返回一个SynchronizedRandomAccessList实例对象ArrayList arrayList new ArrayList();List synchronizedRandomAccessList Collections.synchronizedList(linkedList);(Collections.synchronizedList()方法会判断传入的对象是否实现了 RandomAccess接口是的话会返回一个SynchronizedRandomAccessList对象SynchronizedRandomAccessList是SynchronizedList的子类只是会多一个以线程安全的方式获取子数组的方法)。SynchronizedList类的部分代码如下static class SynchronizedListextends SynchronizedCollectionimplements List {final List list;//源listfinal Object mutex;SynchronizedCollection(Collection c) {this.c Objects.requireNonNull(c);mutex this;//mutex就是SynchronizedList实例自己作为同步锁使用}public E get(int index) {synchronized (mutex) {是父类中的成员变量在父类中会将list赋值给mutexreturn list.get(index);}}public E set(int index, E element) {synchronized (mutex) {return list.set(index, element);}}}2.使用CopyOnWriteArrayListCopyOnWriteArrayList跟ArrayList类似都是实现了List接口只不过它的父类是Object而不是AbstractList。CopyOnWriteArrayList与ArrayList的不同在于1.内部持有一个ReentrantLock类型的lock成员变量final transient ReentrantLock lock new ReentrantLock();在对数组进行修改的方法中都会先获取lock获取成功才能进行修改修改完释放锁保证每次只允许一个线程对数组进行修改。2.CopyOnWriteArrayList内部用于存储元素的Object数组使用volatile//CopyOnWriteArrayListprivate transient volatile Object[] array;//ArrayListprivate transient Object[] elementData;//transient可以看到区别主要在于CopyOnWriteArrayList的Object是使用volatile来修饰的volatile可以使变量具备内存可见性一个线程在工作内存中对变量进行修改后会立即更新到物理内存并且使得其他线程中的这个变量缓存失效其他线程在读取会去物理内存中读取最新的值。(volatile修饰的是指向数组的引用变量所以对数组添加元素删除元素不会改变引用所以为了保证内存可见性CopyOnWriteArrayList.add()方法在添加元素时都是复制出一个新数组进行修改操作后再设置到就数组上)注意事项:Object数组都使用transient修饰是因为transient修饰的属性不会参与序列化ArrayList通过实现writeObject()和readObject()方法来自定义了序列化方法(基于反序列化时节约空间考虑如果用默认的序列方法源elementData数组长度为100实际只有10个元素反序列化时也会分配长度为100的数组造成内存浪费。)public boolean add(E e) {final ReentrantLock lock this.lock;//1. 使用Lock,保证写线程在同一时刻只有一个lock.lock();try {//2. 获取旧数组引用Object[] elements getArray();int len elements.length;//3. 创建新的数组并将旧数组的数据复制到新数组中Object[] newElements Arrays.copyOf(elements, len 1);//4. 往新数组中添加新的数据newElements[len] e;//5. 将旧数组引用指向新的数组setArray(newElements);return true;} finally {lock.unlock();}}3.SynchronizedList和CopyOnWriteArrayList优缺点SynchronizedList是通过对读写方法使用synchronized修饰来实现同步的即便只是多个线程在读数据也不能进行如果是读比较多的场景下会性能不高所以适合读写均匀的情况。而CopyOnWriteArrayList是读写分离的只对写操作加锁但是每次写操作(添加和删除元素等)时都会复制出一个新数组完成修改后然后将新数组设置到旧数组的引用上所以在写比较多的情况下会有很大的性能开销所以适合读比较多的应用场景。原创文章作者9IM如若转载请注明出处https://www.9im.cn/500.html
http://www.huolong8.cn/news/27451/

相关文章:

  • 企业网站模板免费建设部的网站首页
  • 买表的网站农村电商做什么项目好
  • 韶山网站建设爱奇艺会员推广联盟
  • 国土局网站建设情况汇报外贸做哪些网站平台好
  • 平江外贸网站推广找哪家重庆360网络推广
  • 婚纱摄影类网站模板中国国建设监理协会网站
  • 招个网站建设维护采购招标网
  • 做网站卖产品投资大嘛购物网站怎么建立
  • php网站开发ppt实时视频网站怎么做
  • 自己设计好的网站怎么设置访问做外贸的人经常用什么网站
  • 手机商城网站模板个人备案经营网站备案
  • 鄞州区建网站外包租房网站开发需求文档
  • 网站开发会什么软件帮做ppt网站
  • 建设摩托车公司官方网站电子商务网站开发方式
  • 河北网站建设联系电话wordpress lampp建站
  • 做设计的地图网站有哪些济南网络平台设计
  • 网站的建设目标是什么意思wordpress首页文章缩略图
  • 山东省住房城乡建设厅网站首页耒阳市古雍网站建设店
  • 做网站手机适配需要加价吗成都水高新区建设局官方网站
  • 天津网站优化网站搭建工作室加盟
  • 科技公司企业网站源码天津企业建站系统
  • 常平建设局网站wordpress只备份数据
  • 小游戏网站开发者杭州建设网址
  • 屏山县龙华镇中心村建设招标网站微信公众号制作网站有哪些
  • 山西网站建设服务好我要做自媒体要怎么开始
  • html5官方网站开发流程哪个网站设计好
  • 做庭院的网站银川seo优化
  • 一个人可以建设网站吗公司网站建设的视频教程
  • 做生意网站泰安网络犯罪案件
  • 什么网站可以做海报网站排名网站优化