繁体   English   中英

在多个线程之间共享流实例是否安全?

[英]Is it safe to share a stream instance among multiple threads?

我有一套钥匙。

class X {
  private static String[] keys = {"k1", "k2", ... };

我必须从请求中提取键的值。 我想我可以使用map来提取值并在某些请求处理方法中创建必要对象的列表,如下所示:

  public void processReq(Request req) {
    ...
    Stream.of(keys).map(k-> new Pack(k, req.getHeader(k)));

但是,为每个请求创建Stream似乎是不必要的任务。 如果在多个线程之间共享Stream实例是安全的,我想我可以像这样修改代码:

class X {
  private static Stream<String> keys = Stream.of("k1", "k2", ...);
  ...

  public void processReq(Request req) {
    ...
    keys..map(k-> new Pack(k, req.getHeader(k)));

那么,像这样在多个线程之间共享Stream实例是否安全?

流即使在同一线程中也不能被多次使用。 如果要收藏,请使用列表(或数组)

 private static final List<String> keys = Arrays.asList("k1", "k2", ...);

可以多次使用。

List<Pack> packs = keys.stream()
                       .map(k-> new Pack(k, req.getHeader(k)))
                       .collect(Collectors.toList());

在您的代码中,大部分时间都花在了new Packreq.getHeader上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM