package com.gzhs.zsd.thread;
import java.util.concurrent.atomic.AtomicInteger;
/*
-
多线程里面操作变量, 该变量定义为常用成员变量(局部变量), 线程同步, 常用于多线程安全操作变量。
-
例如: 线程A --》操作–》 AtomicInteger al–》成员变量–》 加运算–》 al++
-
线程B --》操作--》 AtomicInteger al--》成员变量--》 减运算--》 al--
-
所在包: java.util.concurrent.atomic
-
@author 谢泽鹏
-
@version 1.0
*/
public class Thread_AtomicInteger {public static void main(String[] args) {
//创建N个线程 for(int i = 0; i < 1000; i++){ //加运算 new Thread(new Runnable() { @Override public void run() { try { //线程A睡眠0.2秒 //Thread.sleep(200); //线程B操作统一对象下成员变量al,进行加运算 AtomicIntegerOption.getAtomicIntegerOptionInstance().increment(); } catch (Exception e) { e.printStackTrace(); } } }).start(); //减运算 new Thread(new Runnable() { @Override public void run() { try { //线程A睡眠0.2秒 //Thread.sleep(200); //线程A操作统一对象下成员变量al,进行减运算 AtomicIntegerOption.getAtomicIntegerOptionInstance().decrement(); } catch (Exception e) { e.printStackTrace(); } } }).start(); }
}
}
//数据共享类
class AtomicIntegerOption{
//单例对象
private static AtomicIntegerOption atomicIntegerOption;
//单例工厂
public static AtomicIntegerOption getAtomicIntegerOptionInstance(){
if(null == atomicIntegerOption){
atomicIntegerOption = new AtomicIntegerOption();
}
return atomicIntegerOption;
}
//定义成员变量, 在多个线程中做《加,减,剩,除》运算, 演示该变量是否保持, 线程同步
//意思: 有A线程在操作该成员变量时al时, 其他线程B必须等待, 操作完毕后, B方可操作
//意思: 线程A++运算后, 线程A--操作方可运算...
AtomicInteger al = new AtomicInteger(0);
//成员变量, 做加运算
public synchronized void increment(){
//System.out.println(Thread.currentThread().getName() + " al进入【加运算】 , al初始值为: " + al);
//System.out.println(Thread.currentThread().getName() + " al开始加处理");
al.getAndIncrement();
System.out.println(Thread.currentThread().getName() + " al做完【加运算】处理后的值为: " + al);
}
//成员变量, 做减运算
public synchronized void decrement(){
//System.out.println(Thread.currentThread().getName() + " al进入【减运算】 , al初始值为: " + al);
//System.out.println(Thread.currentThread().getName() + " al开始减处理");
al.getAndDecrement();
System.out.println(Thread.currentThread().getName() + " al做完【减运算】处理后的值为: " + al);
}
}