java多线程(一) ThreadLocal

来源:互联网 发布:网络弊大于利尖锐问题 编辑:程序博客网 时间:2024/04/30 07:15

ThreadLocal机制主要是提供独立的变量副本。例子如下:

主要参考:http://blog.csdn.net/lufeng20/article/details/24314381

package com.test;public class TestNum {//1 声明ThreadLocal类型的对象    //2 通过匿名内部类覆盖重写ThreadLocal的initialValue()方法,初始化private static ThreadLocal<Integer> seqNum = new ThreadLocal<Integer>()     {public Integer initialValue()         {return 0;}};//3 设置内部变量自增的方法public int getNextNum()     {seqNum.set(seqNum.get() + 1);return seqNum.get();}    //4 声明一个测试线程    private static class TestClient extends Thread     {        //4.1 此处的私有成员为1处定义的ThreadLocal类型的对象private TestNum sn;        //构造方法public TestClient(TestNum sn)         {this.sn = sn;}        //run方法public void run()         {for (int i = 0; i < 3; i++)             {// 4 每个线程打出3个序列值System.out.println("thread[" + Thread.currentThread().getName() + "] --> sn[" + sn.getNextNum() + "]");}}}    public static void main(String[] args)     {TestNum sn = new TestNum();// 3个线程共享sn,各自产生序列号TestClient t1 = new TestClient(sn);TestClient t2 = new TestClient(sn);TestClient t3 = new TestClient(sn);t1.start();t2.start();t3.start();}}

问题:
1 如何保证不出现内存泄露?
使用完一定要使用remove释放,否则会内存泄露。

2 基本原理是什么?
每个ThreadLocal对象创建一个Map,然后用线程的ID作为Map的key,实例对象作为Map的value,这样就能达到各个线程的值隔离的效果。


0 0
原创粉丝点击