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

企业电子商务网站有哪些/优化电池充电什么意思

企业电子商务网站有哪些,优化电池充电什么意思,dhl做单网站,wordpress文章页折叠Atomic包的作用方便程序员在多线程环境下,无锁的进行原子操作Atomic包核心Atomic包里的类基本都是使用Unsafe实现的包装类,核心操作是CAS原子操作;关于CAScompare and swap,比较和替换技术,将预期值与当前变量的值比较…

Atomic包的作用

方便程序员在多线程环境下,无锁的进行原子操作

Atomic包核心

Atomic包里的类基本都是使用Unsafe实现的包装类,核心操作是CAS原子操作;

关于CAS

compare and swap,比较和替换技术,将预期值与当前变量的值比较(compare),如果相等则使用新值替换(swap)当前变量,否则不作操作;

现代CPU已广泛支持CAS指令,如果不支持,那么JVM将使用自旋锁,与互斥锁一样,两者都需先获取锁才能访问共享资源,但互斥锁会导致线程进入睡眠,而自旋锁会一直循环等待直到获取锁;

另外,有一点需要注意的是CAS操作中的ABA问题,即将预期值与当前变量的值比较的时候,即使相等也不能保证变量没有被修改过,因为变量可能由A变成B再变回A,解决该问题,可以给变量增加一个版本号,每次修改变量时版本号自增,比较的时候,同时比较变量的值和版本号即可;

Atomic包主要提供四种原子更新方式

原子方式更新基本类型;

原子方式更新数组;

原子方式更新引用;

原子方式更新字段;

原子方式更新基本类型

以下三个类是以原子方式更新基本类型

AtomicBoolean:原子更新布尔类型。

AtomicInteger:原子更新整型。

AtomicLong:原子更新长整型。

以AtomicInteger为例,

packageconcurrency;importjava.util.concurrent.atomic.AtomicInteger;public classAtomicIntegerTest {static AtomicInteger ai = new AtomicInteger(1);public static voidmain(String[] args) {//相当于i++,返回的是旧值,看方法名就知道,先获取再自增

System.out.println(ai.getAndIncrement());

System.out.println(ai.get());//先自增,再获取

System.out.println(ai.incrementAndGet());

System.out.println(ai.get());//增加一个指定值,先add,再get

System.out.println(ai.addAndGet(5));

System.out.println(ai.get());//增加一个指定值,先get,再set

System.out.println(ai.getAndSet(5));

System.out.println(ai.get());

}

}

注意:Atomic包提供了三种基本类型的原子更新,剩余的Java的基本类型还有char,float和double等,其更新方式可以参考AtomicBoolean的思路来现,AtomicBoolean是把boolean转成整型再调用compareAndSwapInt进行CAS来实现的,类似的short和byte也可以转成整形,float和double可以利用Float.floatToIntBits,Double.doubleToLongBits转成整形和长整形进行相应处理;

原子方式更新数组

以下三个类是以原子方式更新数组,

AtomicIntegerArray:原子更新整型数组里的元素。

AtomicLongArray:原子更新长整型数组里的元素。

AtomicReferenceArray:原子更新引用类型数组里的元素。

以AtomicIntegerArray为例,其方法与AtomicInteger很像,多了个数组下标索引;

packageconcurrency;importjava.util.concurrent.atomic.AtomicIntegerArray;public classAtomicIntegerArrayTest {static int[] valueArr = new int[] { 1, 2};//AtomicIntegerArray内部会拷贝一份数组

static AtomicIntegerArray ai = newAtomicIntegerArray(valueArr);public static voidmain(String[] args) {

ai.getAndSet(0, 3);//不会修改原始数组value

System.out.println(ai.get(0));

System.out.println(valueArr[0]);

}

}

原子方式更新引用

以下三个类是以原子方式更新引用,与其它不同的是,更新引用可以更新多个变量,而不是一个变量;

AtomicReference:原子更新引用类型。

AtomicReferenceFieldUpdater:原子更新引用类型里的字段。

AtomicMarkableReference:原子更新带有标记位的引用类型。

以AtomicReference为例,

packageconcurrency;importjava.util.concurrent.atomic.AtomicReference;public classAtomicReferenceTest {public static AtomicReference atomicUserRef = new AtomicReference();public static voidmain(String[] args) {

User user= new User("conan", 15);

atomicUserRef.set(user);

User updateUser= new User("Shinichi", 17);

atomicUserRef.compareAndSet(user, updateUser);

System.out.println(atomicUserRef.get().getName());

System.out.println(atomicUserRef.get().getOld());

}static classUser {privateString name;private intold;public User(String name, intold) {this.name =name;this.old =old;

}publicString getName() {returnname;

}public intgetOld() {returnold;

}

}

}

原子方式更新字段

以下三个类是以原子方式更新字段,

AtomicIntegerFieldUpdater:原子更新整型字段的更新器。

AtomicLongFieldUpdater:原子更新长整型字段的更新器。

AtomicStampedReference:原子更新带有版本号的引用类型,用于解决使用CAS进行原子更新时,可能出现的ABA问题。

以AtomicIntegerFieldUpdater为例,

packageconcurrency;importjava.util.concurrent.atomic.AtomicIntegerFieldUpdater;public classAtomicIntegerFieldUpdaterTest {private static AtomicIntegerFieldUpdater a =AtomicIntegerFieldUpdater

.newUpdater(User.class, "old");public static voidmain(String[] args) {

User conan= new User("conan", 10);

System.out.println(a.getAndIncrement(conan));

System.out.println(a.get(conan));

}public static classUser {privateString name;//注意需要用volatile修饰

public volatile intold;public User(String name, intold) {this.name =name;this.old =old;

}publicString getName() {returnname;

}public intgetOld() {returnold;

}

}

}

参考资料

《JAVA并发编程实战》

http://www.jmfq.cn/news/5190787.html

相关文章:

  • 怎么做室内设计公司网站/深圳抖音推广公司
  • 网站建设会面临些什么问题/品牌运营管理公司
  • 电商网站功能设计/百度竞价防软件点击软件
  • 重庆合川企业网站建设联系电话/你就知道
  • 超级单页网站模板/深圳推广优化公司
  • 凡科可以做淘客网站吗/黑龙江网络推广好做吗
  • 做网站的前途/中国营销传播网官网
  • 酒类网站建设方案/交换链接的方法
  • 企业网站开发项目策划书/电子商务网站建设方案
  • 新网站建设问卷/seo是什么学校
  • 想做一个网站平台怎么做的/东莞网站制作外包
  • 沈阳网络公司官网/台州seo快速排名
  • 刚做的婚恋网站怎么推广/百度客户端电脑版下载
  • 购买网站平台如何做分录/营销软文800字范文
  • 微信里有人发做任务网站/网络营销策划方案ppt
  • 公众号设置下载wordpress/东莞企业网站排名优化
  • 哪个网站做网上旅社预定/网络推广公司十大排名
  • 宁波网站建设信任蓉胜网络好/百度广告投放技巧
  • 做网站需要美工吗/搜索竞价托管
  • 去哪个网站做农产品推广/线上渠道推广怎么做
  • 上海企业网站制作电话/临沂seo顾问
  • 在建设银行网站申请完信用卡吗/aso排名优化
  • 各类手机网站建设/网站营销外包哪家专业
  • 辽宁城乡建设集团网站/seo关键词排名网络公司
  • 网站开发公司的发票/黑帽seo培训大神
  • 专门做图片剪影的网站/手机百度收录提交入口
  • 合肥有做网站的吗/百度人工服务24小时电话
  • 临沂做商城网站建设/刘雯每日资讯
  • 查询个人信息最全的网站/百度指数是什么
  • 外贸网站建设公司/中国重大新闻