解释:这个问题更多的是关于Kotlin的设计意图.许多表达式语言都支持Ternary operator和if expression[例如,Ruby,Groovy.]
首先,我知道Groovy支持Ternary operator和Elvis operator:Groovy中的三元运算符.所以我不认为这是一个语法问题.
然后官方文件说:
在Kotlin中,if是一个表达式,即它返回一个值.因此没有三元运算符(condition?then:else),因为普通的if在这个角色中工作正常.
这并不能说服我.因为Kotlin支持Elvis operator哪个普通如果在那个角色也可以正常工作.
我觉得ternary operator有时候比平常更好if,不过我想知道Kotlin为什么不支持ternary operator?
编辑:
正如@Petesh所说,我达到了kern.num_taskthreads极限而不是整体线程限制,这限制了单个进程的线程数.
该sysctl kern.num_taskthreads方法是:
kern.num_taskthreads: 2048
Run Code Online (Sandbox Code Playgroud)
当我使用VM args时-XX:ThreadStackSize=1g,我只能创建122个线程; 用-XX:ThreadStackSize=2g,创建了58个线程.这很合理.
但是仍然很奇怪,无论我如何改变-Xssargs,结果始终是2031.该-XssARGS似乎只适用于主线程这我不知道现在.
原始问题:
我运行了一个测试,以找出一个JVM可以创建多少个线程.当我调整了JVM ARGS,-Xmx并且-Xss,其结果并没有改变.
这是代码:
public class ThreadTest {
public static void main(String[] args) {
int count = 0;
try {
while (true) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
TimeUnit.SECONDS.sleep(360);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
thread.start(); …Run Code Online (Sandbox Code Playgroud) 支持有几个线程运行查询任务,每个线程都会返回一个list结果,哪种数据结构会更快地合并结果?
基于链接节点的无界线程安全队列。该队列对元素进行 FIFO(先进先出)排序。队列的头部是在队列中停留时间最长的元素。队列的尾部是在队列中停留时间最短的元素。新元素插入到队列尾部,队列检索操作获取队列头部元素。当许多线程共享对公共集合的访问时,ConcurrentLinkedQueue 是一个合适的选择。与大多数其他并发集合实现一样,此类不允许使用 null 元素。 该实现采用了一种高效的“无等待”算法,该算法基于 Maged M. Michael 和 Michael L. Scott 的《简单、快速和实用的非阻塞和阻塞并发队列算法》中描述的算法。
顾名思义,CopyOnWriteArrayList 使用每个突变操作(例如添加或设置)创建底层 ArrayList 的副本。通常,CopyOnWriteArrayList 非常昂贵,因为它在每次写入操作时都涉及昂贵的数组复制,但如果您有一个迭代次数超过突变的列表,则它非常有效,例如您主要需要迭代 ArrayList 并且不要太频繁地修改它。
java concurrency multithreading java.util.concurrent copyonwritearraylist