java 线程  原子类相关操作演示样例

package org.rui.thread.volatiles;

import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;
/**
* 原子类。
* java SE5引入了诸如AtomicInteger AtomicLong AtomicReference
* 等特殊的原子性变量类。它们提供以下形式的原子性条件更新操作:
*
* boolean compareAndSet(expectedValue,updateValue);
*
* 这些类被调整为能够使用在某些现代处理器上的可获得的,而且是在机器级别上的原子性。
* 因此在使用它们时。通常不须要操心。对于常规编程来说,它们非常少会派上用场,可是在涉级性能调优时,
* 它们就大实用武之地了。比如,我们能够使用AtomicInteger来重写AtomictyTest.java
* @author lenovo
*
*/
public class AtomicIntegerTest implements Runnable {
/**
* 这里我们通过使用AtomicInteger而消除了synchronizedkeyword。
* 由于这个程序不会失败。所以加入了一个timer,以便在5秒钟之后自己主动地终止
*/
private AtomicInteger i=new AtomicInteger(0);
public int getValue(){return i.get();}
private void evenIncrement(){i.addAndGet(2);}
@Override
public void run()
{
while(true)
{
evenIncrement();
}
} public static void main(String[] args)
{
//订时器
new Timer().schedule(new TimerTask()
{
@Override
public void run()
{
System.err.println("Aborting");
System.exit(0);
}
}, 5000);
//线程池
ExecutorService exec=Executors.newCachedThreadPool();
AtomicIntegerTest at=new AtomicIntegerTest();
exec.execute(at);
while(true)
{
int val=at.getValue();
if(val%2!=0)
{
System.out.println(val);
System.exit(0);
}
} }
}
/**
* output:
* Aborting
*/
package org.rui.thread.volatiles;

import java.util.concurrent.atomic.AtomicInteger;

import org.rui.thread.res.EvenChecker;
import org.rui.thread.res.IntGenerator;
/**
* 以下是用AtomicInteger重写MutexEvenGenerator.java:
* 全部其它形式的同步再次通过使用AtomicInteger得到了根除
*
*
*
* 应该强调的是,atomic类被设计用来构建java.util.concureent中的类。
* 因此仅仅有在特殊情况下才在自己的代码中使用它们,即便使用了也须要确保不存在其它可能出现的问题。 * 通常依赖于锁要更安全一些(要么是synchronizedkeyword,要么是显式的lock对象)
* @author lenovo
*
*/
public class AtomicEvenGenerator extends IntGenerator{ private AtomicInteger currentEvenValue=new AtomicInteger(0); @Override
public int next() {
return currentEvenValue.addAndGet(2);
}
public static void main(String[] args) {
EvenChecker.test(new AtomicEvenGenerator());
} }

java 线程 原子类相关操作演示样例 thinking in java4 文件夹21.3.4的更多相关文章

  1. java文件夹相关操作 演示样例代码

    java文件夹相关操作 演示样例代码 package org.rui.io; import java.io.File; import java.io.FilenameFilter; import ja ...

  2. java 覆盖hashCode()深入探讨 代码演示样例

    java 翻盖hashCode()深入探讨 代码演示样例 package org.rui.collection2.hashcode; /** * 覆盖hashcode * 设计HashCode时最重要 ...

  3. JAVA简单Swing图形界面应用演示样例

    JAVA简单Swing图形界面应用演示样例 package org.rui.hello; import javax.swing.JFrame; /** * 简单的swing窗体 * @author l ...

  4. java 线程 被相互排斥堵塞、检查中断演示样例解说----thinking java4

    package org.rui.thread.block; /** * 被相互排斥堵塞 就像在interrupting.java中看到的,假设你偿试着在一个对象上调用其synchronized方法, ...

  5. java并行调度框架封装及演示样例

    參考资料:  阿里巴巴开源项目 CobarClient  源代码实现. 分享作者:闫建忠 分享时间:2014年5月7日 ---------------------------------------- ...

  6. ArcSDE SDK For Java二次开发介绍、演示样例

    在一个工作中,遇到了须要java后台来查询ArcGIS 中用到的Oracle数据库空间数据,因为对ArcGIS空间数据首次接触,仅仅知道Oracle能够使用ST_GEOMETRY字段存储,例如以下图 ...

  7. DataNucleus之JDO操作演示样例

    JDO(Java Data Object )是Java对象持久化的新的规范.也是一个用于存取某种数据仓库中的对象的标准化API. 注意JDO是一种规范,而不是一个产品.而DataNucleus正是实现 ...

  8. Java正則表達式演示样例

    import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexMatches { public s ...

  9. Java线程演示样例 - 继承Thread类和实现Runnable接口

    进程(Process)和线程(Thread)是程序执行的两个基本单元. Java并发编程很多其它的是和线程相关. 进程 进程是一个独立的执行单元,可将其视为一个程序或应用.然而,一个程序内部同事还包括 ...

随机推荐

  1. centos安装 memcached

    .安装 yum -y update yum install -y libevent libevent-devel yum install -y memcached 2.配置 vi /etc/sysco ...

  2. ACM_二维数组的查找

    二维数组的查找 Time Limit: 2000/1000ms (Java/Others) Problem Description: 给定一个n*m的二维数组,保证a[i][j] < a[i+1 ...

  3. 解决eclipse用maven install打包报错问题:-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable and mvn script match.

    1.添加M2_HOME的环境变量 2.Preference->Java->Installed JREs->Edit 选择一个jdk, 添加  -Dmaven.multiModuleP ...

  4. C#中的分层开发

    一般来说,分层主要分三层即:UI(User Interface) 界面显示层,BLL(Business Logic Layer)业务逻辑层,以及DAL(Data Access Layer)数据访问层. ...

  5. JVM 内存区域划分

    一.运行时数据区包括哪几部分? 根据<Java虚拟机规范>的规定,运行时数据区通常包括这几个部分:程序计数器(Program Counter Register).Java栈(VM Stac ...

  6. 02--Tomcat总体结构分析一

    注:此文章大部分参考大神文档,并且结合自身理解,补充了其他相关知识,谢绝转载.      大神原文地址链接:http://www.ibm.com/developerworks/cn/java/j-lo ...

  7. 移动web——touch事件介绍

    基本概念 1.在移动web端点击事件或者滑动屏幕.捏合等动作都是由touchstar.touchmove.touchend这三个事件组合在一起使用的 2.click事件在移动端会有0.2秒的延迟,下面 ...

  8. JS——拖拽盒子

    注意事项: 1.opacity是全部元素变透明,rgba只是背景色变透明 2.先是注册鼠标按下的事件,此时就需要记录鼠标在盒子中的坐标 3.再在鼠标按下事件中注册鼠标移动事件,此时鼠标的坐标是不断变化 ...

  9. JS——input标签注册事件

    注意:淘宝的lable是用定位制作的,事件是oninput事件 <!DOCTYPE html> <html> <head lang="en"> ...

  10. IE bug集锦

    ie8 iframe 不显示 问题描述: IE8的非兼容模式下(兼容模式是ie7,不存在),iframe会不显示: 可以通过Ctrl+A全选或者是调整窗口大小显示出来. 解决办法: 这是由于要显示的i ...