zoukankan      html  css  js  c++  java
  • JDBC: ThreadLocal 类

    1、ThreadLocal

    ThreadLocal用于保存某个线程共享变量。在Java中,每个线程对象都有一个ThreadLocal<ThreadLocal,Object>,其中key就是一个ThreadLocal,而Object就是线程的共享变量。对于同一个static ThreadLocal,不同的线程只能从中get,set,remove自己的变量,而不会影响其他线程的变量。

    在Java的多线程编程中,为保证多个线程对共享变量的安全访问,通常会使用synchronized来保证同一时刻只有一个线程对共享变量进行操作。这种情况下可以将类变量放到ThreadLocal类型的对象中,使变量在每个线程中都有独立拷贝,不会出现一个线程读取变量时而被另一个线程修改的现象。最常见的ThreadLocal使用场景为用来解决数据库连接、Session管理等。
    package com.dgd.test;
    
    import java.util.Random;
    
    public class TestTools {
        public static void main(String[] args) {
            MyThread th1=new MyThread();
            th1.start();
    
            MyThread th2=new MyThread();
            th2.start();
        }
    }
    
    class  Tools{
        private  static Random rand=new Random();
        private  static ThreadLocal<Integer> th=new ThreadLocal<>();
    
        public  static  void setNumber()
        {
            th.set(rand.nextInt(100));
            //这里设置的就是当前线程保存的共享变量,这个共享变量不是之前的多线程之间的共享变量,而是同一个线程在整个生命周期中,使用的共享变量。
        }
        public  static int getNumber(){
            return th.get();
        }
    }
    class MyThread extends Thread{
        public  void  run(){
            Tools.setNumber();
            for (int i = 0; i <5 ; i++) {
                int number=Tools.getNumber();
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread()+":"+number);
            }
        }
    }
     
  • 相关阅读:
    Python 获取校内(人人网)的所有好友照片存储到本地
    Learning DNN Module Developers guide
    第一次用blog
    杂谈:淘宝商城“暴动”事件
    百度三维地图体验(坑爹啊有图有真相)
    从历史的角度杂谈《中国没有乔布斯,美国没有史玉柱》说起
    南漂一年个人随想录
    我离淘宝有多远?
    centos搭建Git分布式管理控制系统
    乔布斯与中国
  • 原文地址:https://www.cnblogs.com/lemonzhang/p/12812861.html
Copyright © 2011-2022 走看看