600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > java 线程安全Long_【Java】线程安全之原子性Atomic(AtomicInteger|LongAdder|AtomicLong)

java 线程安全Long_【Java】线程安全之原子性Atomic(AtomicInteger|LongAdder|AtomicLong)

时间:2018-11-05 13:18:23

相关推荐

java 线程安全Long_【Java】线程安全之原子性Atomic(AtomicInteger|LongAdder|AtomicLong)

线程安全性

原子性

Atomic包

案例

package com.keytech.task;

import java.util.concurrent.Executor;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import java.util.concurrent.Semaphore;

import java.util.concurrent.atomic.AtomicInteger;

import java.util.concurrent.atomic.LongAdder;

/**

* @className: AtomicTest

* @description: TODO 类描述

* @author: mac

* @date: /12/27

**/

public class AtomicTest {

private static Integer clientTotal=5000;

private static Integer threadTotal=200;

private static AtomicInteger count=new AtomicInteger(0);

public static void main(String[] args) {

ExecutorService executorService = Executors.newCachedThreadPool();

Semaphore semaphore= new Semaphore(threadTotal);

for (int i = 0; i

executorService.execute(()->{

try{

semaphore.acquire();

update();

semaphore.release();

}catch (Exception e){

e.printStackTrace();

}

});

}

executorService.shutdown();

System.out.println("count:"+count);

}

private static void update(){

count.incrementAndGet();

}

}

getAndAddInt源码

public final int getAndAddInt(Object var1, long var2, int var4) {

int var5;

do {

var5 = this.getIntVolatile(var1, var2);

} while(!pareAndSwapInt(var1, var2, var5, var5 + var4));

return var5;

}

LongAddr

package com.keytech.task;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import java.util.concurrent.Semaphore;

import java.util.concurrent.atomic.LongAdder;

/**

* @className: LongAddrTest

* @description: TODO 类描述

* @author: mac

* @date: /12/28

**/

public class LongAddrTest {

private static Integer clientTotal=5000;

private static Integer threadTotal=200;

private static LongAdder count=new LongAdder();

public static void main(String[] args) {

ExecutorService executorService = Executors.newCachedThreadPool();

Semaphore semaphore=new Semaphore(threadTotal);

for (int i = 0; i < clientTotal; i++) {

try{

semaphore.acquire();

update();

semaphore.release();

}catch (Exception e){

e.printStackTrace();

}

}

executorService.shutdown();

System.out.println("count"+count);

}

private static void update(){

count.increment();

}

}

AtomicLong

package com.keytech.task;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import java.util.concurrent.Semaphore;

import java.util.concurrent.atomic.AtomicLong;

/**

* @className: AtomicLongTest

* @description: TODO 类描述

* @author: mac

* @date: /12/28

**/

public class AtomicLongTest {

private static Integer clientTotal=5000;

private static Integer threadTotal=200;

private static AtomicLong count=new AtomicLong();

public static void main(String[] args) {

ExecutorService executorService = Executors.newCachedThreadPool();

Semaphore semaphore=new Semaphore(threadTotal);

for (int i = 0; i < clientTotal; i++) {

try{

semaphore.tryAcquire();

update();

semaphore.release();

}catch (Exception e){

e.printStackTrace();

}

}

executorService.shutdown();

System.out.println("count"+count);

}

private static void update(){

count.incrementAndGet();

}

}

LongAddr与AtomicLong的区别

LongAddr与AtomicLong的使用场景

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。