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

}
时间: 2024-10-18 01:52:18

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

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; /** * 原子类,

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

在一个工作中,遇到了须要java后台来查询ArcGIS 中用到的Oracle数据库空间数据,因为对ArcGIS空间数据首次接触,仅仅知道Oracle能够使用ST_GEOMETRY字段存储,例如以下图 可是查询时会发现这个ST_GEOMETRY字段会在结果中出现个多个子的字段,对于arcgis地理知识了解甚少,不知道单独查询一个坐标怎么弄了,有些朋友说须要配置监听文件. 无论怎么说,至少參考了一个大牛的文章,http://blog.csdn.net/linghe301/article/detail

Java正則表達式演示样例

import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexMatches { public static void main( String args[] ){ // 按指定模式在字符串查找 String line = "This order was placed for QT3000! OK? "; String pattern = "(.*)(\\d+)(.*)&qu

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

进程(Process)和线程(Thread)是程序执行的两个基本单元. Java并发编程很多其它的是和线程相关. 进程 进程是一个独立的执行单元,可将其视为一个程序或应用.然而,一个程序内部同事还包括多个进程. Java执行时环境就是一个单独的进程,在它内部还包括了作为进程的各种类和程序. 线程 能够将线程看做轻量级的进程. 线程存在于进程其中,须要的资源开销较小.同一进程中的线程共享进程的资源. Java多线程 每个Java引用都仅仅要有一个线程 - 主线程(main thread).尽管后台

java 线程、线程池基本应用演示样例代码回想

package org.rui.thread; /** * 定义任务 * * @author lenovo * */ public class LiftOff implements Runnable { protected int countDown=10; private static int taskCount=0; private final int id=taskCount++; public LiftOff(){} public LiftOff(int countDown) { thi

java设计模式演示样例

创建模式 1.工厂方法模式(Factory Method)  将程序中创建对象的操作,单独出来处理,创建一个产品的工厂接口,把实际的工作转移到详细的子类.大大提高了系统扩展的柔性,接口的抽象化处理给相互依赖的对象创建提供了最好的抽象模式. public class TestFactoryMethod { public static void main(String[] args) { AnimalFactory af=new DogFactory(); Animal1 a=af.getAnima

Java 8 时间日期库的20个使用演示样例

除了lambda表达式,stream以及几个小的改进之外,Java 8还引入了一套全新的时间日期API,在本篇教程中我们将通过几个简单的任务演示样例来学习怎样使用Java 8的这套API.Java对日期,日历及时间的处理一直以来都饱受诟病.尤其是它决定将java.util.Date定义为可改动的以及将SimpleDateFormat实现成非线程安全的. 看来Java已经意识到须要为时间及日期功能提供更好的支持了,这对已经习惯使用Joda时间日期库的社区而言也是件好事. 关于这个新的时间日期库的最

Android线程池(二)——ThreadPoolExecutor及其拒绝策略RejectedExecutionHandler使用演示样例

MainActivity例如以下: package cc.vv; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import android.os.Bundle; import android.app.Activity; /** * Demo描写叙述: * 线程池(Threa

java操作hbase样例

hbase安装方法请參考:hbase-0.94安装方法具体解释 hbase经常使用的shell命令请參考:hbase经常使用的shell命令样例 java操作hbase,在eclipse中创建一个java项目.将hbase安装文件根文件夹的jar包和lib文件夹下jar包导入项目,然后就能够编写java代码操作hbase了. 以下代码给出来一个简单的演示样例 /** * @date 2015-07-23 21:28:10 * @author sgl */ package com.songguol