好记性不如铅笔头

java, think_in_java, 编程

《Java编程思想》读书笔记:Atomic* 原子变量

最近在整理 Java 的多线程相关的技术,这里备份下关于【 Atomic* 】代码。

github:

https://github.com/cstriker1407/think_in_java 】

AtomaticTest.java类

public class AtomaticTest
{
	public static void test()
	{
		AtomicInteger money = new AtomicInteger(100);
		
		MoneyAdd t1 = new MoneyAdd(0, money);
		MoneyAdd t2 = new MoneyAdd(1, money);
		MoneyAdd t3 = new MoneyAdd(2, money);
		MoneyAdd t4 = new MoneyAdd(3, money);
		
		t1.start();
		t2.start();
		t3.start();
		t4.start();
	}
}

class MoneyAdd extends Thread
{
	int id;
	AtomicInteger money = null;
	public MoneyAdd(int id, AtomicInteger money)
	{
		super();
		this.id = id;
		this.money = money;
	}

	@Override
	public void run()
	{
		for (int i = 0; i < 5; i++)
		{
			int add = new Random().nextInt(100);
			int total = money.addAndGet(add);
			System.out.println("线程"+ id + " 增加了"+ add +"  当前有" + total + "原始:" + (total - add));
			
			try {
				Thread.sleep(1);
			} catch (InterruptedException e)
			{
				e.printStackTrace();
			}
			
		}
	}
}

部分日志打印:

线程0 增加了68  当前有168原始:100
线程3 增加了87  当前有418原始:331
线程2 增加了79  当前有331原始:252
线程1 增加了84  当前有252原始:168
线程1 增加了54  当前有472原始:418
线程0 增加了17  当前有554原始:537
线程3 增加了28  当前有500原始:472

备注:

Leave a Reply

2 × 4 =

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据