(java入门)ThreadLocal Sample

本文通过一个具体的Java示例,展示了如何使用ThreadLocal来为每个线程提供独立的变量副本,避免了多线程环境下共享变量可能导致的数据不一致问题。通过观察输出结果,可以看到不同线程中ThreadLocal变量的变化情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package net.tianyu.test;

public class TestThreadLocal {
	static Calc calc_ = new Calc();

	public static void main(String[] args) throws Exception {
		new Thread(new WorkThread()).start();
		new Thread(new WorkThread()).start();
	}

	static class WorkThread implements Runnable {
		public void run() {
			calc_.init();
			for (int i = 0; i < 10; i++) {
				try {
					calc_.addOne();
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
	}

	static class Data {
		int intData = 0;
		String strData = "";
	}

	static class Calc {
		ThreadLocal<Data> sum_ = new ThreadLocal<Data>();
		Integer sum2_;

		void init() {
			Data value = new Data();
			sum_.set(value);
			sum2_ = new Integer(0);
		}

		void addOne() {
			Data value = sum_.get();
			value.intData++;
			value.strData = new Integer(value.intData).toString();
			String threadName = Thread.currentThread().getName();
			System.out.println(threadName + " ThreadLocal " + value.strData);
			
			sum2_ = sum2_ + 1;
			System.out.println(threadName + " Integer " + sum2_.toString());
		}
	}

}

 

结果如下

Thread-0 ThreadLocal 1
Thread-1 ThreadLocal 1
Thread-0 Integer 1
Thread-1 Integer 1
Thread-0 ThreadLocal 2
Thread-1 ThreadLocal 2
Thread-1 Integer 2
Thread-0 Integer 3
Thread-1 ThreadLocal 3
Thread-1 Integer 4
Thread-0 ThreadLocal 3
Thread-0 Integer 5
Thread-1 ThreadLocal 4
Thread-1 Integer 6
Thread-0 ThreadLocal 4
Thread-0 Integer 7
Thread-1 ThreadLocal 5
Thread-0 ThreadLocal 5
Thread-0 Integer 8
Thread-1 Integer 9
Thread-0 ThreadLocal 6
Thread-0 Integer 10
Thread-1 ThreadLocal 6
Thread-1 Integer 11
Thread-0 ThreadLocal 7
Thread-0 Integer 12
Thread-1 ThreadLocal 7
Thread-1 Integer 13
Thread-1 ThreadLocal 8
Thread-0 ThreadLocal 8
Thread-0 Integer 14
Thread-1 Integer 14
Thread-0 ThreadLocal 9
Thread-0 Integer 15
Thread-1 ThreadLocal 9
Thread-1 Integer 16
Thread-0 ThreadLocal 10
Thread-0 Integer 17
Thread-1 ThreadLocal 10
Thread-1 Integer 18

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值