美文网首页
ThreadLocal

ThreadLocal

作者: 大黑跟小白的日常 | 来源:发表于2020-09-14 20:19 被阅读0次

ThreadLocal入门

模仿PageHelper案例

public class PageHelper {
    // 使用ThreadLocal实现
    private static ThreadLocal<Page> threadlocal = new ThreadLocal<>();
    public static Page get(){
        Page page = threadlocal.get();
        return page;
    }
    public static void set(Page page){
        threadlocal.set(page);
    }
    public static void startPage(Integer pageNum, Integer pageSize) {
        set(new Page(pageSize, pageNum));
    }
}
class Page{
    int pageSize;
    int pageNum;
    public Page() {
    }
    public Page(int pageSize, int pageNum) {
        this.pageSize = pageSize;
        this.pageNum = pageNum;
    }
    public int getPageSize() {
        return pageSize;
    }
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    public int getPageNum() {
        return pageNum;
    }

    public void setPageNum(int pageNum) {
        this.pageNum = pageNum;
    }
}
public static void main(String[] args) {
        for (int i = 1; i <=10 ; i++) {
            int i1 = i;
            new Thread(new Runnable() {
                @Override
                public void run() {
                    // 如下两行代码没有任何 逻辑 引用关系
                    PageHelper.startPage(i1,10);
                    sqlBefore("select * from user");
                    // 分页参数是如何传递到sql执行的前置拦截器的呢?
                }
            }).start();
        }
    }

    // sql 执行 前者拦截器
    public static void sqlBefore(String sql) {
        // ? 如何实现 pageNum 跟 pageSize的拼接
        int pageNum = 0,pageSize = 0;
        Page page = PageHelper.get();
        pageNum = page.getPageNum();
        pageSize = page.getPageSize();
        sql = sql + " Limit "+((pageNum-1)*pageSize)+", " + pageSize;
        System.out.println(sql+Thread.currentThread().getName());
    }

结果

image.png

原理分析(总结)

万物接对象,当前线程也是对象,可以通过ThreadLocal 往 当前线程对象的成员属性中存数据。方便在线程的生命周期内随时取用。

源码分析

image.png
image.png
image.png
image.png
image.png

源码是最好的答案!

相关文章

网友评论

      本文标题:ThreadLocal

      本文链接:https://www.haomeiwen.com/subject/tehtyktx.html