public final class Resource {
private static Resource instance = new Resource();
private Resource() {
System.err.println("The resource initializing...!");
}
public static Resource getInstance() {
return instance;
}
public void start() {
System.err.println("The resource starting...!");
}
public void end() {
System.err.println("The resource ending...!");
}
public void destory() {
System.err.println("The resource destroying...!");
}
}
/**
* Use the thread locale
* @author Administrator
*/
public final class ResourceUtil {
private static ThreadLocal<Resource> resHandler = new ThreadLocal<Resource>();
public final static Resource getResource() {
Resource resource = resHandler.get();
if (resource == null) {
resource = Resource.getInstance();
resHandler.set(resource);
}
return resource;
}
public final static void work() {
Resource resource = getResource();
resource.start();
resource.end();
destroy();
}
public final static void destroy() {
Resource resource = resHandler.get();
if (resource != null) {
resource.destory();
resHandler.remove();
}
resource = null;
}
/**
* @param args
*/
public static void main(String[] args) {
new Thread() {
@Override
public void run() {
ResourceUtil.work();
System.err.println(Thread.currentThread() + " : go away!");
}
}.start();
new Thread() {
@Override
public void run() {
ResourceUtil.work();
System.err.println(Thread.currentThread() + " : go away!");
}
}.start();
new Thread() {
@Override
public void run() {
ResourceUtil.work();
System.err.println(Thread.currentThread() + " : go away!");
}
}.start();
new Thread() {
@Override
public void run() {
ResourceUtil.work();
System.err.println(Thread.currentThread() + " : go away!");
}
}.start();
new Thread() {
@Override
public void run() {
ResourceUtil.work();
System.err.println(Thread.currentThread() + " : go away!");
}
}.start();
new Thread() {
@Override
public void run() {
ResourceUtil.work();
System.err.println(Thread.currentThread() + " : go away!");
}
}.start();
new Thread() {
@Override
public void run() {
ResourceUtil.work();
System.err.println(Thread.currentThread() + " : go away!");
}
}.start();
new Thread() {
@Override
public void run() {
ResourceUtil.work();
System.err.println(Thread.currentThread() + " : go away!");
}
}.start();
}
}
分享到:
相关推荐
ThreadLocal入门教程。 讲解了线程安全和ThreadLocal的使用的基本知识。
ThreadLocal
ThreadLocal应用示例及理解,这个写了相关的示例,可以参考一下。
理解ThreadLocal 理解ThreadLocal 理解ThreadLocal 理解ThreadLocal
学习ThreadLocal,了解其中的原理,以及学习其中的优点!避免坑点!!
正确理解ThreadLocal.pdf
DbUTils中用ThreadLocal类
主要介绍ThreadLocal的原理,实例分析以及注意事项
java 简单的ThreadLocal示例
ThreadLocal的几种误区ThreadLocal的几种误区ThreadLocal的几种误区
本例以序列号生成的程序为例,展示ThreadLocal的使用
ThreadLocal保证一个类的实例变量在各个线程中都有一份单独的拷贝, 从而不会影响其他线程中的实例变量
设计模式及ThreadLocal详细讲解资料,想要学习java或者提升自己技术的同学可以下载观看
详解java底层实现原理,ThreadLocal底层实现的数据结构,为什么不会导致内存泄露
Synchronized与ThreadLocal
JDBC事务的封装和Threadlocal实例,参考博客:http://blog.csdn.net/daijin888888/article/details/50988053
ThreadLocal源码分析,主要有ThreadLocal源码以及ThreadLocal的内部结构在jdk8前后的变化
ThreadLocal的基本原理,核心机制,源码,ThreadLocal在分布式架构中的应用,ThreadLocal在基础架构,开源中间件,使用非常广泛,建议掌握。
ThreadLocal原理及在多层架构中的应用