threadlocal使用场景和代码
时间: 2023-11-15 17:50:11 浏览: 100
示例可以是什么?
ThreadLocal 的使用场景可以是多线程中的数据隔离,可以保证线程之间数据的独立性,同时实现了线程安全。代码示例如下:
```
public class MyRunnable implements Runnable {
private ThreadLocal<Integer> threadLocal = new ThreadLocal<>();
@Override
public void run() {
threadLocal.set((int) (Math.random() * 100D));
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
}
System.out.println(Thread.currentThread().getName() + ": " + threadLocal.get());
}
}
public class ThreadLocalTest {
public static void main(String[] args) {
MyRunnable sharedRunnableInstance = new MyRunnable();
Thread thread1 = new Thread(sharedRunnableInstance);
Thread thread2 = new Thread(sharedRunnableInstance);
thread1.start();
thread2.start();
try {
thread1.join(); //wait for thread 1 to terminate
thread2.join(); //wait for thread 2 to terminate
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
```
当我们在多个线程中共享同一个类实例时,如果这个类的某个属性是可变状态,那么它会受到多个线程同时修改的影响,可能会导致并发问题。在上面的代码中,我们定义了一个线程本地变量 `threadLocal`,这个变量在每个线程中都是独立的。每个线程对它的操作都不会影响到其他线程,从而实现了数据的隔离。
阅读全文