一、前言

      要理解ThreadLocal,首先必须理解线程安全。线程可以看做是一个具有一定独立功能的处理过程,它是比进程更细度的单位。当程序以单线程运行的时候,我们不需要考虑线程安全。然而当一个进程中包含多个线程的时候,就需要考虑线程安全问题,因为此时线程可能会同时操作同一个资源,当两个或者两个以上线程同时操作一个资源的时候,就会造成冲突、不一致等问题,即线程不安全。

      解决线程安全问题,本质上就是解决资源共享问题,一般有以下手段:

      1)可重入(不依赖环境);2)互斥(同一时间段只允许一个线程使用);3)原子操作;4)Thread-Local

 

二、Thread-Local

      Thread-Local是一个很简单的思想:如果一个资源会引起线程竞争,那就为每一个线程配备一个资源。这就是ThreadLocal需要做的事情。

 

三、ThreadLocal的用法

      在理解ThreadLocal之前,首先看一下它的用法:

 1 public class ThreadLocalTest {
 2     public static ThreadLocal<Integer> intLocal = new ThreadLocal<Integer>() {
 3         @Override
 4         protected Integer initialValue() {
 5             // TODO Auto-generated method stub
 6             return 0;
 7         }
 8 
 9         @Override
10         public Integer get() {
11             // TODO Auto-generated method stub
12             set(super.get() + 1);
13             return super.get();
14         }
15 
16         @Override
17         public void set(Integer value) {
18             // TODO Auto-generated method stub
19             super.set(value);
20         }
21 
22         @Override
23         public void remove() {
24             // TODO Auto-generated method stub
25             super.remove();
26         }
27     };
28 
29     public static void main(String[] args) {
30         // TODO Auto-generated method stub
31         for(int index = 0; index < 3; index ++)
32             new MyThread(index).start();
33     }
34 }
35 
36 class MyThread extends Thread{
37     int id;
38     
39     public MyThread(int id){
40         this.id = id;
41     }
42 
43     @Override
44     public void run() {
45         // TODO Auto-generated method stub
46         for(int index = 0; index < 3; index ++){
47             System.out.println("Thread-" + id + " : " + ThreadLocalTest.intLocal.get());
48             try {
49                 Thread.sleep((int)(100 * Math.random()));
50             } catch (InterruptedException e) {
51                 // TODO Auto-generated catch block
52                 e.printStackTrace();
53             }
54         }
55     }
56 }
View Code

相关文章:

  • 2021-07-19
  • 2022-12-23
  • 2022-12-23
  • 2021-10-11
  • 2021-09-27
猜你喜欢
  • 2021-08-10
  • 2021-07-11
  • 2022-02-27
相关资源
相似解决方案