我在 Java 7 上工作。
我想知道该方法contains在 HashSet 对象上是否是线程安全的。
HashSet 由一个线程初始化。然后我们用不可修改的集合 ( Collections.unmodifiableSet)包装 HashSet 。初始化后,多个线程只调用方法contains。
当我阅读 Javadoc 时,我不清楚。
在HashSet Javadoc 上,我们可以阅读
这个类实现了 Set 接口,由一个哈希表(实际上是一个 HashMap 实例)支持。
...
请注意,此实现不是同步的。
在HashMap Javadoc 上,我们可以阅读:
请注意,此实现不是同步的。如果多个线程并发访问一个散列映射,并且至少有一个线程在结构上修改了映射,则必须在外部进行同步。(结构修改是添加或删除一个或多个映射的任何操作;仅更改与实例已包含的键关联的值不是结构修改。)
对我来说,这意味着该方法contains不是结构修改。
那么多次调用该方法contains是线程安全的吗?
如果是真的:它是否在所有 JVM 实现(如 IBM JVM)上都有保证?
我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.net.http.HttpClient的连接/请求数量?
我看到我可以将 Executor 设置为 HttpClient 但我不知道:如果我限制 Executor 池中的线程数,是否也会限制连接数?
还有一种方法可以限制连接数?
我有一个 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)