zoukankan      html  css  js  c++  java
  • java 线程 原子类相关操作演示样例 thinking in java4 文件夹21.3.4

    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()); } }



  • 相关阅读:
    yii中通过HTTP post接收
    网络编程
    python 异常处理
    面向对象(2)
    面向对象
    什么是模块精讲
    常用模块二
    各种推导式详解
    匿名函数
    迭代器生成器
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/6917575.html
Copyright © 2011-2022 走看看