`
543089122
  • 浏览: 153198 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

java.util.concurrent.atomic.*包的体会

    博客分类:
  • java
阅读更多
java.util.concurrent.atomic.*包的体会

package thread.concurrent.atomic;

import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.atomic.AtomicReference;

import sun.misc.Unsafe;

public class AtomicTest {
	AtomicLong atomicLong = new AtomicLong(11);
	AtomicReference<Map> atomicRef = null;

	// private static long value = 10;
	// private static final Unsafe unsafe = Unsafe.getUnsafe();
	public static void main(String[] args) throws SecurityException,
			NoSuchFieldException {
		final AtomicTest atomicLongTest = new AtomicTest();
		atomicLongTest.set();

		for (int i = 0; i < 10; i++) {
			new Thread() {
				public void run() {
					atomicLongTest.updateRef();
				};
			}.start();
		}

		// Field valueField = AtomicLongTest.class.getDeclaredField("value");
		// long ll = unsafe.objectFieldOffset(valueField);
		// System.out.println(ll);
	}

	private void set() {
		Map map = new HashMap();
		map.put("name", "name1");
		//通过AtomicReference封装的对象就是原子对象了。
		atomicRef = new AtomicReference<Map>(map);
	}

	private Object updateRef() {
		boolean f;
		Map expect;
		do {
			expect = atomicRef.get();
			Map update = new HashMap();
			update.putAll(expect);
			int n = (new Random()).nextInt(1000);
			update.put("name", n);
			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			f = atomicRef.compareAndSet(expect, update);
			System.out.println(Thread.currentThread().getName() + ",得到的原来的map:"
					+ expect + ",新的map:" + update + ",f:" + f);
		} while (!f);
		return expect;
	}

	private long count() {
		boolean f;
		long r;
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		do {
			r = atomicLong.get();
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}

			/**
			 * AtomicLong这个类是提供原子操作的帮助类,其实没多少实质性的内容,这个类主要靠compareAndSet这个方,
			 * 而这个方法其实是调用sun.misc.Unsafe这个非安全类完成的。之所以说是非安全类是因为这个类会根据平台的不同调用
			 * 当前平台的本地API做事,这个包也是SUN唯一没有公开的包。 首先回去得到一个Unsafe unsafe =
			 * Unsafe.getUnsafe();的对象
			 * 然后调用unsafe.compareAndSwapLong(this,valueOffset, expect,
			 * update);方法完成任务的。
			 * 
			 * 把value申明成volatile的,其他的方法可以随便写了。
			 * 
			 */
			f = atomicLong.compareAndSet(r, r + 1);// 比较并且更新值,如果更新失败返回false,否则返回true
			System.out.println(Thread.currentThread().getName() + ",r:" + r
					+ ",f:" + f);
		} while (!f);
		return r;
	}
}

分享到:
评论

相关推荐

    java.util.concurrent 学习ppt

    Java.util.concurrent是Java 5.0引入的一个重要包,它为多线程编程提供了一组高级并发工具。这个包的设计者是Doug Lea,它的出现是JSR-166的一部分,也被称作Tiger更新。Java.util.concurrent的引入是为了解决传统...

    java.util.concurrent

    java.util.concurrent总体概览图。 收取资源分3分。...java.util.concurrent主要包括5个部分executor,colletions,locks,atomic,tools。 该图详细的列举了并发包下面的结构,包含所有接口和具体实现类。

    28个java常用的工具类

    21. **`java.util.concurrent.atomic.*`**: 原子变量,用于无锁编程。 22. **`java.util.logging.Logger`**: 日志记录工具。 23. **`java.util.concurrent.locks.Lock`** 和 **`java.util.concurrent.locks....

    30个常用java工具类

    26. **`java.util.concurrent.atomic`** 包:提供原子操作类,用于线程安全的变量更新。 27. **`java.util.function`** 包:函数式接口,如`Predicate`、`Function`和`Supplier`,支持Lambda表达式。 28. **`java....

    java工具类

    24. **`java.util.concurrent.atomic`** 包:包含原子操作类,用于线程安全的变量更新。 25. **`java.util.Calendar`**:旧版的日历类,可以处理复杂的日期和时间计算。 26. **`java.nio.file.Files`** 和 **`java...

    java.util.concurrent 测试源文件

    Java.util.concurrent(JUC)是Java平台中的一个核心包,专门用于处理多线程并发问题。这个包包含了大量的工具类和接口,极大地简化了并发编程的复杂性,提高了程序的性能和可伸缩性。本测试源文件主要是针对JUC并发...

    java API文档

    - **java.util.concurrent.atomic**:原子变量支持。 - **java.util.concurrent.locks**:锁机制支持。 - **java.util.jar**:支持JAR文件的创建和处理。 - **java.util.logging**:日志记录支持。 - **java....

    关于 java.util.concurrent 您不知道的 5 件事,第 2 部分

    在Java编程领域,`java.util.concurrent`包是并发编程的核心工具包,提供了高效、线程安全的类和接口,使得开发者能够更容易地处理多线程环境。本篇将深入探讨这个包中一些鲜为人知的知识点,以帮助你提升并发编程的...

    java_util_concurrent_user_guide

    `java.util.concurrent`(JUC)包是Java标准库提供的一组强大的并发工具,它为开发者提供了丰富的类和接口,帮助简化并发编程。本用户指南将深入探讨这个包中的核心概念和主要类。 1. **线程池**: `java.util....

    Redis客户端Redisson.zip

    java.util.Queue 分布式 of java.util.Deque 分布式 java.util.Map 分布式 java.util.concurrent.ConcurrentMap 通过TTL实现可重入 java.util.concurrent.locks.Lock 分布式 java.util.concurrent.atomic....

    java api速查手册

    8. **java.util.concurrent.atomic**:提供了原子操作类,如AtomicInteger、AtomicLong,适用于在高并发场景下进行无锁编程。 9. **java.time**:自Java 8引入的新日期时间API,替代了旧的java.util.Date和java....

    concurrent-1.3.4-sources.jar

    3. **java.util.concurrent.atomic** 包:这个包包含了一系列原子操作类,如AtomicInteger、AtomicLong等。这些类提供了在不使用synchronized关键字的情况下保证线程安全的更新操作,它们基于CAS(Compare and Swap...

    JavaAPI(官方英文版)

    13. **并发编程(Concurrency)**:`java.util.concurrent`包提供了高效率的并发工具,如`ExecutorService`、`Future`、`Semaphore`等,以及原子变量类(`Atomic*`)。 通过深入学习和理解Java API,开发者可以有效...

    Java API 文档 jdk-17.0.2-doc-all

    13. **内存模型和并发工具**:`java.util.concurrent.atomic`和`java.util.concurrent.locks`包提供了原子变量和锁机制,帮助开发者正确地处理多线程环境下的共享数据。 在"docs"这个压缩包文件中,开发者可以深入...

    30个java工具类

    25. **并发工具类**:`java.util.concurrent.atomic`和`java.util.concurrent.locks`提供了原子操作和锁机制,用于并发控制。 26. **设计模式**:单例、工厂、观察者、装饰者等设计模式在Java开发中广泛使用。 27....

    J.U.C系列线程安全的理论讲解编程开发技术共6页.pdf

    4. **`java.util.concurrent.atomic`和`java.util.concurrent.locks`包结合使用**:在某些场景下,原子变量和锁可以协同工作,提供更加高效和灵活的并发策略。 5. **`java.util.concurrent.CompletionService`和`...

    concurrent 源代码

    2. **原子类**: `java.util.concurrent.atomic`子包包含了各种原子操作类,如`AtomicInteger`, `AtomicLong`等,它们提供了在不使用锁的情况下进行原子性更新的机制,提高了并发性能。 3. **同步容器**: `java.util...

    工作在同一个java虚拟机中的线程能实现消息互发(alpha)

    5. **原子变量(Atomic Variables)**:`java.util.concurrent.atomic`包提供了原子操作类,如`AtomicInteger`、`AtomicLong`等,它们在多线程环境下提供了无锁的数据更新机制。 6. **管程(Java 5后引入的`java....

    大厂面试题第二季(加入了MQ和Mysql的面试题以及答案).mmap

    API中JUC并发的三个相应包和解释1.java.util.concurrent。 concurrent是并发的意思2.java.util.concurrent.atomic。 atomic 是原子性的意思3.java.util.concurrent.locks。 locks是锁的意思

Global site tag (gtag.js) - Google Analytics