AI代码解释 @Testpublicvoidtest()throws InterruptedException{Thread[]threads=newThread[10];for(int i=0;i<threads.length;i++){threads[i]=newThread(()->{for(int j=0;j<1000;j++){num=atomicInteger.incrementAndGet();}});
首先说明,此处 AtomicInteger,一个提供原子操作的Integer 的类,常见的还有AtomicBoolean、AtomicInteger、AtomicLong、AtomicReference 等,他们的实现原理相同,区别在与运算对象类型的不同。令人兴奋地,还可以通过 AtomicReference<V>将一个对象的所有操作转化成原子操作。
方法当然很多,但是为了和我们今天的主题对应上,很自然的联想到使用AtomicInteger。下面我们使用AtomicInteger重新来测试一遍: 在上面的代码中我们使用了AtomicInteger来定义a,而且使用了AtomicInteger的函数incrementAndGet来对a进行自增操作。现在我们再来测试一遍。 现在使用了AtomicInteger,不管你测试多少次,最后结果一定是50。为...
方法一:使用自增运算符 publicclassAutoIncrement{publicstaticvoidmain(String[]args){intnum=0;num++;System.out.println("自增后的值为:"+num);}} 1. 2. 3. 4. 5. 6. 7. 上面的代码中,我们定义了一个整型变量num,并使用自增运算符++对其进行自增操作。 方法二:使用AtomicInteger类 importjava.util....
来看AtomicInteger提供的接口。 //获取当前的值 public final int get() //取当前的值,并设置新的值 public final int getAndSet(int newValue) //获取当前的值,并自增 public final int getAndIncrement() //获取当前的值,并自减 public final int getAndDecrement() ...
我们知道i++操作不是原子操作, 除了使用Synchronized进行同步外,也可以使用AtomicInteger/AtomicLong原子类进行实现。package com.wkcto.volatilekw; import java.util.concurrent.atomic.AtomicInteger; /** * 使用原子类进行自增 * Author: 老崔 */ public class Test04 { public static void main(String[] args) ...
经过一番百度、谷歌,还可以用AtomicInteger这个类,这个类提供了自增、自减等方法(如i++或++i都可以实现),这些方法都是线程安全的。 一、补充概念 1.什么是线程安全性? 《Java Concurrency in Practice》中有提到:当多个线程访问某个类时,这个类始终都能表现出正确的行为,那么就称这个类是线程安全的。
private AtomicInteger atomicInteger = new AtomicInteger(); // 需要保证多个线程使用的是同一个AtomicInteger atomicInteger.incrementAndGet(); //执行自增1 通过调用方式示例,我们可以发现悲观锁基本都是在显式的锁定之后再操作同步资源,而乐观锁则直接去操作同步资源。那么,为何乐观锁能够做到不锁定同步资源也可以正确...
AtomicIntegerArray(int[] array):构造函数,将array克隆一份,传入AtomicIntegerArray,因此,修改AtomicIntegerArray中的元素时不会影响原数组。 int length():获取数组长度。 int get(int i):获取位置i的元素。 void set(int i, int newValue):设置对应位置的值。