多线程环境下使用责任链,串链了

编程入门 行业动态 更新时间:2024-10-19 08:44:15

<a href=https://www.elefans.com/category/jswz/34/1767532.html style=多线程环境下使用责任链,串链了"/>

多线程环境下使用责任链,串链了

问题描述:

系统定义了一套校验链:链1,链2,,,链N;交由不同的业务初始化自定义的链结构。比如

业务a:定义的是链1、链3

业务b:定义的是链2、链4

结果:

业务a走的链成2、4了。

public abstract class CheckChain {protected CheckChain chain;public void setNextChain(CheckChain nextChain){this.chain = nextChain;if (null != nextChain){System.out.println(nextChain.getClass());}}public static class Builder{private CheckChain head;private CheckChain tail;public Builder addChain(CheckChain chain) {if (this.head == null) {this.head = this.tail = chain;return this;}this.tail.setNextChain(chain);this.tail = chain;return this;}public CheckChain build() {return this.head;}}public abstract boolean process(Object object);}
@PostMapping(value = "testChain")
public void testChain(){System.out.println("===================链A");CheckChain chainA = new CheckChain.Builder().addChain(chain1).addChain(chain3).build();System.out.println("===================链B");CheckChain chainB = new CheckChain.Builder().addChain(chain1).addChain(chain4).build();System.out.println("chainA:"+System.identityHashCode(chainA));System.out.println("chainB:"+System.identityHashCode(chainB));System.out.println(chainA == chainB);
}

如上代码所示,定义了链A和链B,运行结果如下,chainA和chainB这2个变量,在内存中的地址引用是一样的,也就是这2个链,其实是一个对象。但是chainA定义的链1、3;chainB定义的链2、4,如果执行的话,最后链对象只能是链2、4了。

原因是创建的两个责任链对象时使用了构造者设计模式直接返回的责任链对象头结点对象地址,另外,在spring容器管理注入对象时,默认创建是单例对象。所以chainA和chainB会相等。

那怎样才能不会串链?那就别用spring的注入了,每次重新new对象吧。

@PostMapping(value = "testChain")
public void testChain(){System.out.println("===================链A");CheckChain chainA = new CheckChain.Builder().addChain(new Chain1()).addChain(new Chain3()).build();System.out.println("===================链B");CheckChain chainB = new CheckChain.Builder().addChain(new Chain1()).addChain(new Chain4()).build();System.out.println("chainA:"+System.identityHashCode(chainA));System.out.println("chainB:"+System.identityHashCode(chainB));System.out.println(chainA == chainB);
}

更多推荐

多线程环境下使用责任链,串链了

本文发布于:2023-11-17 03:37:42,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1637197.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:多线程   环境   责任

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!