小编lec*_*eur的帖子

HashSet 和多线程

我在 Java 7 上工作。

我想知道该方法contains在 HashSet 对象上是否是线程安全的。

HashSet 由一个线程初始化。然后我们用不可修改的集合 ( Collections.unmodifiableSet)包装 HashSet 。初始化后,多个线程只调用方法contains

当我阅读 Javadoc 时,我不清楚。

HashSet Javadoc 上,我们可以阅读

这个类实现了 Set 接口,由一个哈希表(实际上是一个 HashMap 实例)支持。

...

请注意,此实现不是同步的。

HashMap Javadoc 上,我们可以阅读:

请注意,此实现不是同步的。如果多个线程并发访问一个散列映射,并且至少有一个线程在结构上修改了映射,则必须在外部进行同步。(结构修改是添加或删除一个或多个映射的任何操作;仅更改与实例已包含的键关联的值不是结构修改。)

对我来说,这意味着该方法contains不是结构修改。

那么多次调用该方法contains是线程安全的吗?

如果是真的:它是否在所有 JVM 实现(如 IBM JVM)上都有保证?

java collections concurrency multithreading java-7

6
推荐指数
1
解决办法
3270
查看次数

什么是CharsetDecoder.decode(ByteBuffer,CharBuffer,endOfInput)

CharsetDecoder上课有问题.

代码的第一个例子(有效):

    final CharsetDecoder dec = Charset.forName("UTF-8").newDecoder();
    final ByteBuffer b = ByteBuffer.allocate(3);
    final byte[] tab = new byte[]{(byte)-30, (byte)-126, (byte)-84}; //char €
    for (int i=0; i<tab.length; i++){
        b.put(tab, i, 1);
    }
    try {
        b.flip();
        System.out.println("a" + dec.decode(b).toString() + "a");
    } catch (CharacterCodingException e1) {
        e1.printStackTrace();
    }
Run Code Online (Sandbox Code Playgroud)

结果是 a€a

但是当我执行这段代码时:

    final CharsetDecoder dec = Charset.forName("UTF-8").newDecoder();
    final CharBuffer chars = CharBuffer.allocate(3);
    final byte[] tab = new byte[]{(byte)-30, (byte)-126, (byte)-84}; //char €
    for (int i=0; i<tab.length; i++){
        ByteBuffer buffer = ByteBuffer.wrap(tab, …
Run Code Online (Sandbox Code Playgroud)

java character-encoding

5
推荐指数
1
解决办法
4247
查看次数

如何限制 java.net.http.HttpClient 的连接

如何限制java.net.http.HttpClient的连接/请求数量?

我看到我可以将 Executor 设置为 HttpClient 但我不知道:如果我限制 Executor 池中的线程数,是否也会限制连接数?

还有一种方法可以限制连接数?

java java-http-client

4
推荐指数
1
解决办法
2143
查看次数

如何通过 openssl 将 jwk 转换为公钥

我有一个 JWE,标头中有一个临时公钥。所以我有坐标X和Y。

我在 shell 模式下的问题是如何将 JWK 转换为 pem 格式的 ECC 公钥。

例如,这里有一个 jwk

{"epk":{"kty":"EC","crv":"P-256","x":"GCl--lQHb7NKYU3jXpKVI_BYaTlALT5JFPdl3sbB9mY","y":"ADRX25PBSlZJE79drET0ARtRqZAkUIMNt9aa2bbjBYY"}}
Run Code Online (Sandbox Code Playgroud)

当我这样做之后

> # I convert the x coordonate from base64url to base64
> echo -n -e "GCl++lQHb7NKYU3jXpKVI/BYaTlALT5JFPdl3sbB9mY" | base64 -d | hexdump

0000000 2918 fa7e 0754 b36f 614a e34d 925e 2395
0000010 58f0 3969 2d40 493e f714 de65 c1c6 66f6
0000020

> echo -n -e "ADRX25PBSlZJE79drET0ARtRqZAkUIMNt9aa2bbjBYY" | base64 -d | hexdump

0000000 3400 db57 c193 564a 1349 5dbf 44ac 01f4
0000010 511b 90a9 5024 0d83 d6b7 …
Run Code Online (Sandbox Code Playgroud)

encryption openssl elliptic-curve public-key-encryption jwk

3
推荐指数
1
解决办法
3172
查看次数