nta*_*lbs 1 java multithreading java-8 java-stream
我有一套钥匙.
class X {
private static String[] keys = {"k1", "k2", ... };
Run Code Online (Sandbox Code Playgroud)
我必须从请求中提取键的值.我想我可以map用来提取值并在一些请求处理方法中创建列表必需的对象,如下所示:
public void processReq(Request req) {
...
Stream.of(keys).map(k-> new Pack(k, req.getHeader(k)));
Run Code Online (Sandbox Code Playgroud)
但是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)));
Run Code Online (Sandbox Code Playgroud)
那么,Stream在多个线程之间共享实例是否安全?
Streams不打算多次使用,即使在同一个线程中也是如此.如果您想拥有一个集合,请使用List(或数组)
private static final List<String> keys = Arrays.asList("k1", "k2", ...);
Run Code Online (Sandbox Code Playgroud)
这可以多次使用.
List<Pack> packs = keys.stream()
.map(k-> new Pack(k, req.getHeader(k)))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
在您的代码中,new Pack或者req.getHeader是大部分时间花在的地方.
| 归档时间: |
|
| 查看次数: |
150 次 |
| 最近记录: |