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的存取是互不影响的。

  • 相关阅读:
    python编写爬虫脚本并实现APScheduler调度
    python实践设计模式(一)概述和工厂模式
    90、java ftp 读取文件
    91、mysql批量删除表
    92、kkfile打印当前页
    CSS3实践之路(四):文本特效
    CSS3实践之路(六):CSS3的过渡效果(transition)与动画(animation)
    CSS3实践之路(二):盒子模型(box Model)和边框(border)
    CSS3实践之路(三):颜色(Color)和背景(Backgroud)
    谈谈javascript中的定时器
  • 原文地址:https://www.cnblogs.com/wxdmw/p/13859030.html
Copyright © 2011-2022 走看看