标签:main 调优 code util 调整 thread extends mutex post
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
标签:main 调优 code util 调整 thread extends mutex post
原文地址:http://www.cnblogs.com/zhchoutai/p/6917575.html