博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【代码积累】ThreadLocal
阅读量:4099 次
发布时间:2019-05-25

本文共 1272 字,大约阅读时间需要 4 分钟。

public class Test {	public void test() {		ThreadId id = new ThreadId();				TaskFac fac = new TaskFac();		for( int i=0; i< 10; i++ ) {			fac.createTask().start();			try {				Thread.sleep(100);			} catch (InterruptedException e) {				// TODO Auto-generated catch block				e.printStackTrace();			}		}	}}public class Task implements Runnable{	private ThreadId id = new ThreadId(); 		@Override	public void run() {		// TODO Auto-generated method stub		System.out.println("Task ID ="+ThreadId.get());	}}import java.util.concurrent.atomic.AtomicInteger;public class ThreadId {	private static final AtomicInteger nextId = new AtomicInteger(0); /*初始化为0,该值用来在每次被引用的时候,生成一个唯一的值*/		//Thread local variable containing each thread's ID	private static final ThreadLocal
threadId = new ThreadLocal
() { protected Integer initialValue() { /*initialValuez在基类中是protected,不能在子类覆盖的时候reduce visibility,因此也要加上protected*/ return nextId.getAndIncrement(); /*nextId 之所以要是static类型,因为有此static方法引用了它,static方法不能引用non-static的field。 * 这里之所以都定义成static类型,因为non-static本身就是线程安全的,而static是非线程安全的,这里是为了说明在多线程访问的场景下, * ThreadLocal的作用。*/ } }; public static int get() { return threadId.get(); }}public class TaskFac { public Thread createTask() { return new Thread(new Task()); }}

转载地址:http://othii.baihongyu.com/

你可能感兴趣的文章
hbase(1)---概述
查看>>
hbase(5)---API示例
查看>>
SSM-CRUD(1)---环境搭建
查看>>
SSM-CRUD(2)---查询
查看>>
SSM-CRUD (3)---查询功能改造
查看>>
Nginx(2)---安装与启动
查看>>
springBoot(5)---整合servlet、Filter、Listener
查看>>
C++ 模板类型参数
查看>>
C++ 非类型模版参数
查看>>
设计模式 依赖倒转原则 & 里氏代换原则
查看>>
DirectX11 光照
查看>>
图形学 图形渲染管线
查看>>
DirectX11 计时和动画
查看>>
DirectX11 光照与材质的相互作用
查看>>
DirectX11 环境光
查看>>
DirectX11 镜面光
查看>>
DirectX11 三种光照组成对比
查看>>
DirectX11 指定材质
查看>>
DirectX11 平行光
查看>>
DirectX11 点光
查看>>