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就有 ...
随机推荐
- jquery json 操作(转)
原文:http://www.vososo.com/?p=919 Jquery-json 是 jQuery 的一个插件,可轻松实现对象和 JSON 字符串之间的转换.可序列化 JavaScript 对象 ...
- JavaScript EventLoop
转自:http://cek.io/blog/2015/12/03/event-loop/ What is JavaScript What is JavaScript anyway? Some word ...
- GridView列的排序功能
首先要给GridView设置三个属性 GridView4.AllowSorting = true; GridView4.Attributes.Add("SortExpression" ...
- JavaScript基础---作用域,匿名函数和闭包【转】
匿名函数就是没有名字的函数,闭包是可访问一个函数作用域里变量的函数. 一.匿名函数 //普通函数 function box() { //函数名是 box return 'TT'; } //匿名函数 f ...
- jquery 字数限制
$("#TextArea1").keydown(function(){ 10 var curLength=$("#TextArea1").val().lengt ...
- S1 :数组迭代方法
ECMAScript 5 还新增了两个归并数组的方法:reduce()和reduceRight().这两个方法都会迭代数组的所有项,然后构建一个最终返回的值.其中,reduce()方法从数组的第一项开 ...
- UVa 11375 - Matches
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- JMeter常用函数整理
"_csvRead"函数 csvRead函数是从外部读取参数,csvRead函数可以从一个文件中读取多个参数. 下面具体讲一下如何使用csvread函数: 1.新建一个csv或者t ...
- 创建一个ROS msg
1. msg •msg:msg文件是简单的文本文件,用于描述ROS中消息(消息的各个参数项).用于为不同的编程语言生成有关消息的源代码. •srv:描述服务的文件,由两部分组成:请求和反馈: msg文 ...
- 【干货来了】2014年K2房地产IT分享峰会
2014年K2房地产IT分享峰会已圆满落幕,嘉宾们纷纷出招,分享干货,现场妙语连珠不断,高潮迭起. 主题:流程驱动的地产业务管控平台 嘉宾:王寿欣(卓越地产战略与运营管理部 副总经理) 卓越地产应用K ...