Java最近版本新特性使用介绍
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处!
在阅读《Thinking in Java》的过程中,并发这一章出现不少新特性,工作中也有遇到,就详细介绍一下
Java5出现一个新的对象AutomicInteger,经查询它是为避免线程不安全而出现,避免传统方法里使用finally加锁的情况,在高并发环境下应用比较常见!
用法如下:
public static void main(String[] args) {
AtomicInteger ai = new AtomicInteger(0);
print("当前值:" + ai.get());// 取得当前值
print("给当前值加2,返回更新后的值:" + ai.addAndGet(2));// 给当前值加2,返回更新后的值
print("当前值:" + ai.get());// 取得当前值
print(" 减1操作,返回更新后的值:" + ai.decrementAndGet());// 减1操作,返回更新后的值
print("当前值:" + ai.get());// 取得当前值
print(" 给当前值加2,返回当前的值:" + ai.getAndAdd(2));// 给当前值加2,返回当前的值
print("当前值:" + ai.get());// 取得当前值
print("减1操作, 返回操作前的值:" + ai.getAndDecrement());//减1操作, 返回操作前的值
print("当前值:" + ai.get());// 取得当前值
print("加1操作,返回操作前的值:" + ai.getAndIncrement());// 加1操作,返回操作前的值
print("当前值:" + ai.get());// 取得当前值
print(" 设置新值,返回操作前的值:" + ai.getAndSet(2));// 设置新值,返回操作前的值
print("当前值:" + ai.get());// 取得当前值
print("加1操作,返回更新后的值:" + ai.incrementAndGet());// 加1操作,返回更新后的值
System.out.println(ai.compareAndSet(2, 3));
System.out.println((ai.weakCompareAndSet(2, 3)));
ai.lazySet(13);// 设置新值
print("当前值:" + ai.get());// 取得当前值
} static void print(String str) {
System.out.println(str);
}
结果如下:
当前值:0
给当前值加2,返回更新后的值:2
当前值:2
减1操作,返回更新后的值:1
当前值:1
给当前值加2,返回当前的值:1
当前值:3
减1操作, 返回操作前的值:3
当前值:2
加1操作,返回操作前的值:2
当前值:3
设置新值,返回操作前的值:3
当前值:2
加1操作,返回更新后的值:3
false
false
当前值:13
Java5中一个新的特性:volatile,主要也是用来实现并发,特点:如果值改变,则告诉所有调用对象
示例:
public class LatestModify extends Thread {
volatile boolean mRun = true; public void test() {
try {
Thread.sleep(2);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mRun = false;
} @Override
public void run() {
// TODO Auto-generated method stub
super.run();
while (mRun) {
System.out.println("我跑跑!");
}
System.out.println("我不跑了!");
} public static void main(String[] args) throws InstantiationException,
IllegalAccessException {
LatestModify modify = LatestModify.class.newInstance();
modify.start();
modify.test();
}
我跑跑!
我跑跑!
...........
我跑跑!
我跑跑!
我跑跑!
我不跑了!
Java7中新特性Semaphore允许多个任务同时访问一个资源
原理:给一个资源若干“许可证”,分发给每个任务
应用场景:不详
class Pool<T>{
private int size;
private List<T> items=new ArrayList<T>();
private volatile boolean[] checkedOut;
private Semaphore available;
public Pool(Class<T> classObject,int size){
this.size=size;
checkedOut=new boolean[size];
available=new Semaphore(size, true);
for (int i = 0; i < size; i++) {
try {
items.add(classObject.newInstance());
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public T checkOut() throws InterruptedException{
available.acquire();
return getItem();
}
public void checkIn(T x){
if(releaseItem(x)){
available.release();
}
}
private synchronized T getItem(){
for (int i = 0; i < size; i++) {
if(!checkedOut[i]){
checkedOut[i]=true;
return items.get(i);
}
}
return null;
}
private synchronized boolean releaseItem(T item){
int index=items.indexOf(item);
if(index==-1)
return false;
if(checkedOut[index]){
checkedOut[index]=false;
return true;
}
return false;
}
}
因此加上这两个关键字volatile和Semphore,加上sychronzied关键字对象加锁、对方法加锁、Lock、wait+notify、Sleep总共有7个方法,进行多线程同步即并发操作
3Q!
Java最近版本新特性使用介绍的更多相关文章
- Atitit..jdk java 各版本新特性 1.0 1.1 1.2 1.3 1.4 1.5(5.0) 1.6(6.0) 7.0 8.0 9.0 attilax 大总结
Atitit..jdk java 各版本新特性 1.0 1.1 1.2 1.3 1.4 1.5(5.0) 1.6(6.0) 7.0 8.0 9.0 attilax 大总结 1.1. Java的编年史2 ...
- Java各版本新特性总结
Java或者说JDK的更新一般分为两部分内容:Java语言.JVM(C.C++编写),但通常情况下都不会单独发布,因为新的语言特性需要特定的JVM支持才行.下面我总结了从古至今Java各版本的新 ...
- java 各版本新特性
Java 5,6,7,8,9,10,11新特性吐血总结 lkd_whh关注赞赏支持 12018.04.01 14:09:15字数 1,948阅读 10,615 作者:拔剑少年 简书地址:https:/ ...
- 记 Java 各版本新特性
Java 8: Lambda 表达式: (paramList) -> expression; 或者 (paramList) -> {statments;} 演示用例: public int ...
- [转] Java 8的新特性
简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和JVM等方面的十多个新特性.在本文中我们将学习这些新特性,并用实际的例子 ...
- Java 8的新特性—终极版
作者:杜琪[译] 原文链接:http://www.jianshu.com/p/5b800057f2d8 1. 简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本 ...
- Atitit.c# .net 3.5 4.0 4.5 5.0 6.0各个版本新特性战略规划总结
Atitit.c# .net 3.5 4.0 各个版本新特性战略规划总结 1. --------------.Net Framework版本同CLR版本的关系1 2. paip.----------- ...
- c# .net 3.5 4.0 4.5 5.0 6.0各个版本新特性战略规划总结【转载】
引用:http://blog.csdn.net/attilax/article/details/42014327 c# .net 3.5 4.0 各个版本新特性战略规划总结 1. ---------- ...
- Atitit opencv版本新特性attilax总结
Atitit opencv版本新特性attilax总结 1.1. :OpenCV 3.0 发布,史上功能最全,速度最快的版1 1.2. 应用领域2 1.3. OPENCV2.4.3改进 2.4.2就有 ...
随机推荐
- 批量Load/Store指令的寻址方式
批量Load/Store指令用于实现在一组寄存器和一块连续的内存单元之间传输数据.也称为多寄存器寻址方式,即一条指令可以完成多个寄存器值的传送.这种寻址方式可以用一条指令最多完成传送16个通用寄存器的 ...
- Android TextView标签的显示
在默认情况下,如果一个TextView中的文字太多,会跨行显示, 通过下面两个参数的设置,可以使TextView固定显示一行,未显示完成的后面用...... android:maxLines=&quo ...
- Linux学习之CentOS--CentOS6.4下Mysql数据库的安装与配置【转】
如果要在Linux上做j2ee开发,首先得搭建好j2ee的开发环境,包括了jdk.tomcat.eclipse的安装(这个在之前的一篇随笔中已经有详细讲解了Linux学习之CentOS(七)--C ...
- PDF 补丁丁 0.4.1.839 测试版发布:调整页面留白
新的测试版的补丁功能实现了调节页面留白的功能(之前的820版尚未实现该功能),页面合并功能支持从资源管理器拖放文件或目录到列表,还修正了一些问题. 欢迎下载测试.
- 在Android应用中使用OpenGL
Android为OpenGL ES支持提供了GLSurfaceView组件,这个组件用于显示3D图形.GLSurfaceView本身并不提供绘制3D图形的功能,而是由GLSurfaceView.Re ...
- POJ 1503 Integer Inquiry 大数 难度:0
题目链接:http://poj.org/problem?id=1503 import java.io.*; import java.math.BigInteger; import java.util. ...
- HDU 2795 单点更新,区间优先查找(想法)
Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- 微信支付调用JSAPI缺少参数:timeStamp
一般是安卓没问题,苹果会出现这样的问题,弹出下面这样的提示,如果你也是这样,那就恭喜你,现在,你找到解决的方法了 请看红色框框的timeStamp(图片有点小,可以鼠标右键打开图片 查看) 请注意,这 ...
- javascript photo1
- WP8 学习 Onnavigatedto和OnnavigatedFrom的区别
OnNavigatedTo:重写 OnNavigatedTo 方法以检查导航请求并且准备供显示的页面.这个方法就像是初始化(Ini) ,它先于Loaded事件之前被执行,所以在这里可以控制一些初始化前 ...