本文来自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最近版本新特性使用介绍的更多相关文章

  1. 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 ...

  2. Java各版本新特性总结

       Java或者说JDK的更新一般分为两部分内容:Java语言.JVM(C.C++编写),但通常情况下都不会单独发布,因为新的语言特性需要特定的JVM支持才行.下面我总结了从古至今Java各版本的新 ...

  3. java 各版本新特性

    Java 5,6,7,8,9,10,11新特性吐血总结 lkd_whh关注赞赏支持 12018.04.01 14:09:15字数 1,948阅读 10,615 作者:拔剑少年 简书地址:https:/ ...

  4. 记 Java 各版本新特性

    Java 8: Lambda 表达式: (paramList) -> expression; 或者 (paramList) -> {statments;} 演示用例: public int ...

  5. [转] Java 8的新特性

    简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和JVM等方面的十多个新特性.在本文中我们将学习这些新特性,并用实际的例子 ...

  6. Java 8的新特性—终极版

    作者:杜琪[译] 原文链接:http://www.jianshu.com/p/5b800057f2d8 1. 简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本 ...

  7. 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.----------- ...

  8. 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. ---------- ...

  9. Atitit opencv版本新特性attilax总结

    Atitit opencv版本新特性attilax总结 1.1. :OpenCV 3.0 发布,史上功能最全,速度最快的版1 1.2. 应用领域2 1.3. OPENCV2.4.3改进 2.4.2就有 ...

随机推荐

  1. poj2676 Sudoku(DFS)

    做了很久还是参考了别人的答案orz,其实也不难啊.我要开始学一下怎么写搜索了... 题目链接:poj2676 Sudoku 题解:暴力搜索,DFS每个空白格子所放数字. #include<cst ...

  2. GPOR

    [tengzhenzhen15@lu01 gpor]$ for ((i=0; i<=19; i++)) do ./gpor -S 0.4 X4058_300_gpor/mytask_train. ...

  3. 登陆验证前对用户名和密码加密之后传输数据---base64加密

    以下这种方法是加密传输的简单实现 1,base64.js /** * * Base64 encode / decode * * */ function Base64() { // private pr ...

  4. Java DSL简介(收集整理)

    一.领域特定语言(DSL) 领域特定语言(DSL)通常被定义为一种特别针对某类特殊问题的计算机语言,它不打算解决其领域外的问题.对于DSL的正式研究已经持续很多年,直 到最近,在程序员试图采用最易读并 ...

  5. hadoop工作流引擎之azkaban [转]

    介绍 Azkaban是twitter出的一个任务调度系统,操作比Oozie要简单很多而且非常直观,提供的功能比较简单.Azkaban以Flow为执行单元进行定时调度,Flow就是预定义好的由一个或多个 ...

  6. Python Twisted介绍

    原文链接:http://www.aosabook.org/en/twisted.html 作者:Jessica McKellar Twisted是用Python实现的基于事件驱动的网络引擎框架.Twi ...

  7. java二维数组的定义

    java中的一维数组的定义都熟了,但是二位数组和一维数组的定义有些微差别.在网上看到了篇文章,总结的很详细.转载下了. 原文链接[http://blog.sina.com.cn/s/blog_6189 ...

  8. Js练习题之查找字符串中出现最多的字符和个数

    如sssfgtdfssddfsssfssss,出现最多的字符是s,出现了12次 传统写法 分析: 1.准备一个空的json,通过循环字符串的每个字符来看,如果json里没有这个字符,就在json里创建 ...

  9. form v

    <form name="example_form" action="http://google.com" method="POST"& ...

  10. exe转msi

    1.起因 由于域推送只支持msi安装包,而很多常用的工具比如Adobe Flash Player.exe.SilverLight.exe都是exe格式的,于是引出要将exe转成silent msi的工 ...