zoukankan      html  css  js  c++  java
  • Java之回调模式和ThreadLocal

    最近上网看了一下回调模式,浏览了几篇文章,感觉还挺有意思,赶紧记录一下,免得以后忘记还要上网查。

    public class Leader implements CallBack {
    
        public void askCoder() {
            new Coder().build(this);
        }
    
        @Override
        public void msgBack(String taskName) {
            System.out.println(taskName);
        }
    }

    这个类代表公司高层

    public class Coder {
    
        public void build(CallBack callBack) {
            System.out.println("project");//你写了一个项目
            callBack.msgBack("salary");//然后管老板要工资
        }
    }

    这个类代表苦*码农

    public class Boot {
        public static void main(String[] args) {
            Leader leader = new Leader();
            leader.askCoder();//老板叫你写个项目
        }
    }

    这个主方法模拟你们的互动,这大概就是所谓的双向调用吧,至于回调接口就偷个懒直接用了CallBack,不晓得这个接口是不是给回调用的。

    ThreadLocal这个东西上网看了一些文章,给我的感觉就是这东西就像一个“线程银行”,它能记住不同的线程的“账户”。

    比如A线程存了100元,B线程存了200元,那么当A线程来取钱的时候,ThreadLocal不会把B线程账户里的钱给A线程。

    下面我做了一个简单的测试,首先定义一个自定义线程:

    import lombok.SneakyThrows;
    import lombok.extern.java.Log;
    
    @Log
    public class LocalThread implements Runnable {
    
        String msg;
    
        public LocalThread(String msg) {
            this.msg = msg;
        }
    
        @SneakyThrows
        @Override
        public void run() {
            Boot.threadLocal.set(msg);
            log.info(Thread.currentThread().getName() + Boot.threadLocal.get());
        }
    }

    然后,测试一下不同线程对ThreadLocal的存取:

    import lombok.extern.java.Log;

    @Log
    public class Boot {
    public static ThreadLocal threadLocal = new ThreadLocal();

    public static void main(String[] args) throws InterruptedException {
    threadLocal.set("时光雕琢他风骨");//主线程存入字符串
    LocalThread l1 = new LocalThread("风霜冷冽他眉目");
    Thread thread = new Thread(l1);
    thread.start();

    Thread.sleep(2000);
    log.info(Thread.currentThread().getName() + Boot.threadLocal.get());//主线程获取字符串

    }
    }

    结果可以发现,主线程和子线程对ThreadLocal的存取是互不影响的。

  • 相关阅读:
    Android Bitmap 常见的几个操作:缩放,裁剪,旋转,偏移
    vue.js 本地解决跨域
    VUE添加网站favicon.ico图标
    在mpvue引入flyio
    页面中加入地图map
    360校招——最后赢家(C++)
    奇安信校招——买口罩(c++)
    携程校招——携程海洋馆的海豚小宝宝(C++)
    阿里云Web应用托管服务,低成本建个人博客(wordpress和wiki.js)
    (嵌入式)工程模板的创建和MDK下配置开发STM32F103ZE
  • 原文地址:https://www.cnblogs.com/wxdmw/p/13859030.html
Copyright © 2011-2022 走看看