本文来自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. DOM操作 append prependTo after before

    通过JavaScript可以很方便的获取DOM节点,从而进行一系列的DOM操作.但实际上一般开发者都习惯性的先定义好HTML结构,但这样就非常不灵活了. 试想下这样的情况:如果我们通过AJAX获取到数 ...

  2. 在进程View时的四个构造函数详解

    public View(Context context):源代码中的解释如下:在Code中实例化一个View就会调用第一个构造函数 /** * Simple constructor to use wh ...

  3. How to decide on the correct number of clusters?

    Determining the number of clusters/segments in hierarchical clustering/segmentation algorithms 由于uni ...

  4. Storm(2) - Log Stream Processing

    Introduction This chapter will present an implementation recipe for an enterprise log storage and a ...

  5. 抓包工具tshark使用备忘

         抓包命令行工具tshark可以用于自定制,相比GUI工具可以实现一些自动化,譬如把某些关注的数据抓起下来存放到文本中,然后再分析输出.      demo: std::string deco ...

  6. PDF 补丁丁 0.4.1.688 测试版发布(请务必用其替换 682 测试版)

    修复了测试版682 损坏书签.读取字符宽度表出错的问题.请下载了旧测试版的网友马上换用新的测试版.

  7. ANGULAR JS WATCH监听使用

    ANGULAR 监听使用: 当angular数据模型发生变化时,我们需要如果需要根据他的变化触发其他的事件. $watch是一个scope函数,用于监听模型变化,当你的模型部分发生变化时它会通知你. ...

  8. Https 协议

    前言 HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版.即HTTP下 ...

  9. PULL解析

    PULL解析类似于SAX解析,都采用事件驱动(利用getEventType()方法)方式进行解析,当PULL解析器开始解析之后,可以不断地调用PULL解析器的next()方法获取下一个解析事件(开始文 ...

  10. 操作系统cmd算法

    实验一  命令解释程序的编写(两周内) 一.目的和要求 1. 实验目的 (1)掌握命令解释程序的原理: (2)*掌握简单的DOS调用方法: (3)掌握C语言编程初步. 2.实验要求 编写类似于DOS, ...