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是Java 5.0引入的一个重要包,它为多线程编程提供了一组高级并发工具。这个包的设计者是Doug Lea,它的出现是JSR-166的一部分,也被称作Tiger更新。Java.util.concurrent的引入是为了解决传统...
java.util.concurrent总体概览图。 收取资源分3分。...java.util.concurrent主要包括5个部分executor,colletions,locks,atomic,tools。 该图详细的列举了并发包下面的结构,包含所有接口和具体实现类。
21. **`java.util.concurrent.atomic.*`**: 原子变量,用于无锁编程。 22. **`java.util.logging.Logger`**: 日志记录工具。 23. **`java.util.concurrent.locks.Lock`** 和 **`java.util.concurrent.locks....
26. **`java.util.concurrent.atomic`** 包:提供原子操作类,用于线程安全的变量更新。 27. **`java.util.function`** 包:函数式接口,如`Predicate`、`Function`和`Supplier`,支持Lambda表达式。 28. **`java....
24. **`java.util.concurrent.atomic`** 包:包含原子操作类,用于线程安全的变量更新。 25. **`java.util.Calendar`**:旧版的日历类,可以处理复杂的日期和时间计算。 26. **`java.nio.file.Files`** 和 **`java...
Java.util.concurrent(JUC)是Java平台中的一个核心包,专门用于处理多线程并发问题。这个包包含了大量的工具类和接口,极大地简化了并发编程的复杂性,提高了程序的性能和可伸缩性。本测试源文件主要是针对JUC并发...
- **java.util.concurrent.atomic**:原子变量支持。 - **java.util.concurrent.locks**:锁机制支持。 - **java.util.jar**:支持JAR文件的创建和处理。 - **java.util.logging**:日志记录支持。 - **java....
在Java编程领域,`java.util.concurrent`包是并发编程的核心工具包,提供了高效、线程安全的类和接口,使得开发者能够更容易地处理多线程环境。本篇将深入探讨这个包中一些鲜为人知的知识点,以帮助你提升并发编程的...
`java.util.concurrent`(JUC)包是Java标准库提供的一组强大的并发工具,它为开发者提供了丰富的类和接口,帮助简化并发编程。本用户指南将深入探讨这个包中的核心概念和主要类。 1. **线程池**: `java.util....
java.util.Queue 分布式 of java.util.Deque 分布式 java.util.Map 分布式 java.util.concurrent.ConcurrentMap 通过TTL实现可重入 java.util.concurrent.locks.Lock 分布式 java.util.concurrent.atomic....
8. **java.util.concurrent.atomic**:提供了原子操作类,如AtomicInteger、AtomicLong,适用于在高并发场景下进行无锁编程。 9. **java.time**:自Java 8引入的新日期时间API,替代了旧的java.util.Date和java....
3. **java.util.concurrent.atomic** 包:这个包包含了一系列原子操作类,如AtomicInteger、AtomicLong等。这些类提供了在不使用synchronized关键字的情况下保证线程安全的更新操作,它们基于CAS(Compare and Swap...
13. **并发编程(Concurrency)**:`java.util.concurrent`包提供了高效率的并发工具,如`ExecutorService`、`Future`、`Semaphore`等,以及原子变量类(`Atomic*`)。 通过深入学习和理解Java API,开发者可以有效...
13. **内存模型和并发工具**:`java.util.concurrent.atomic`和`java.util.concurrent.locks`包提供了原子变量和锁机制,帮助开发者正确地处理多线程环境下的共享数据。 在"docs"这个压缩包文件中,开发者可以深入...
25. **并发工具类**:`java.util.concurrent.atomic`和`java.util.concurrent.locks`提供了原子操作和锁机制,用于并发控制。 26. **设计模式**:单例、工厂、观察者、装饰者等设计模式在Java开发中广泛使用。 27....
4. **`java.util.concurrent.atomic`和`java.util.concurrent.locks`包结合使用**:在某些场景下,原子变量和锁可以协同工作,提供更加高效和灵活的并发策略。 5. **`java.util.concurrent.CompletionService`和`...
2. **原子类**: `java.util.concurrent.atomic`子包包含了各种原子操作类,如`AtomicInteger`, `AtomicLong`等,它们提供了在不使用锁的情况下进行原子性更新的机制,提高了并发性能。 3. **同步容器**: `java.util...
5. **原子变量(Atomic Variables)**:`java.util.concurrent.atomic`包提供了原子操作类,如`AtomicInteger`、`AtomicLong`等,它们在多线程环境下提供了无锁的数据更新机制。 6. **管程(Java 5后引入的`java....
API中JUC并发的三个相应包和解释1.java.util.concurrent。 concurrent是并发的意思2.java.util.concurrent.atomic。 atomic 是原子性的意思3.java.util.concurrent.locks。 locks是锁的意思