为什么要Collections.sort(List<T>)签名:
public static <T extends Comparable<? super T>> void sort(List<T> list)
Run Code Online (Sandbox Code Playgroud)
并不是 :
public static <T extends Comparable<T>> void sort(List<? extends T> list)
Run Code Online (Sandbox Code Playgroud)
以下是JCIP的摘录
作者说,为了使上面的代码线程安全,我们必须使用客户端锁定.
要使此方法有效,我们必须使用List使用的相同锁,方法是使用客户端锁定或外部锁定.客户端锁定需要保护使用某个对象X的客户端代码,其中锁X用于保护自己的状态.为了使用客户端锁定,您必须知道X使用什么锁.
为什么我们不能简单地将List <E>对象设置为私有以使ListHelper类是线程安全的?
我一直在经历JCIP,作者在那里说..
线程限制的特殊情况适用于volatile变量.只要确保volatile变量仅从单个线程写入,对共享的volatile变量执行读 - 修改 - 写操作是安全的.
例如,count ++被认为是一个复合操作(读取值,向其中添加一个值,并更新值)并将count指定为volatile不会使此操作成为原子操作,因此这里不保证线程安全!我对吗 ??但是这里作者说我们可以修复它,如果我们确保volatile变量只是从一个线程写的.我没理解这一点.请提供说明.
JAX-RS 提供了 StreamingOutput 接口,我们可以实现它来对我们的响应主体进行原始流式处理。
public interface StreamingOutput {
void write(OutputStream output)
}
Run Code Online (Sandbox Code Playgroud)
我不确定他们为什么要构建一个接口来公开响应输出流。为什么不直接注入一个 OutputStream ,我们可以简单地写入它!
曾经有过
public synchronized void deletePerson(Person p)
{ mySet.remove();}
Run Code Online (Sandbox Code Playgroud)
它也会保持线程安全吗?
给定两个字符串:
a="hello h"
b=""
Run Code Online (Sandbox Code Playgroud)
在bash 4.2版中,其regex比较结果为true
[[ "${a}" =~ "${b}" ]]
echo $? # 0
Run Code Online (Sandbox Code Playgroud)
在bash 3.2版中,正则表达式的比较结果为false
[[ "${a}" =~ "${b}" ]]
echo $? # 2
Run Code Online (Sandbox Code Playgroud)
编辑:第一个结果在带有4.2.46(2)-发行版bash的linux操作系统上运行,而第二个结果在运行3.2.57(1)-发行版bash的OS Mojave上运行。