小编zhu*_*zhu的帖子

为什么Kotlin不支持"三元运算符"

解释:这个问题更多的是关于Kotlin的设计意图.许多表达式语言都支持Ternary operatorif expression[例如,Ruby,Groovy.]


首先,我知道Groovy支持Ternary operatorElvis operator:Groovy中的三元运算符.所以我不认为这是一个语法问题.


然后官方文件说:

在Kotlin中,if是一个表达式,即它返回一个值.因此没有三元运算符(condition?then:else),因为普通的if在这个角色中工作正常.

这并不能说服我.因为Kotlin支持Elvis operator哪个普通如果在那个角色也可以正常工作.

我觉得ternary operator有时候比平常更好if,不过我想知道Kotlin为什么不支持ternary operator

ternary-operator kotlin

12
推荐指数
2
解决办法
1966
查看次数

什么是JVM可以创建的阈值限制线程数

编辑:

正如@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)

java multithreading jvm

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

同时合并列表 - CopyOnWriteArrayList 或 ConcurrentLinkedQueue 哪个更好?

支持有几个线程运行查询任务,每个线程都会返回一个list结果,哪种数据结构会更快地合并结果?

并发链接队列

基于链接节点的无界线程安全队列。该队列对元素进行 FIFO(先进先出)排序。队列的头部是在队列中停留时间最长的元素。队列的尾部是在队列中停留时间最短的元素。新元素插入到队列尾部,队列检索操作获取队列头部元素。当许多线程共享对公共集合的访问时,ConcurrentLinkedQueue 是一个合适的选择。与大多数其他并发集合实现一样,此类不允许使用 null 元素。 该实现采用了一种高效的“无等待”算法,该算法基于 Maged M. Michael 和 Michael L. Scott 的《简单、快速和实用的非阻塞和阻塞并发队列算法》中描述的算法。

写入数组列表时复制

顾名思义,CopyOnWriteArrayList 使用每个突变操作(例如添加或设置)创建底层 ArrayList 的副本。通常,CopyOnWriteArrayList 非常昂贵,因为它在每次写入操作时都涉及昂贵的数组复制,但如果您有一个迭代次数超过突变的列表,则它非常有效,例如您主要需要迭代 ArrayList 并且不要太频繁地修改它。

java concurrency multithreading java.util.concurrent copyonwritearraylist

2
推荐指数
1
解决办法
2123
查看次数