在 Scala 中使用 ForkJoinPool
Using ForkJoinPool in Scala
在代码中:
val executor = new ForkJoinPool()
executor.execute(new Runnable{
def run = println("This task is run asynchronously")
})
Thread.sleep(10000)
此代码打印:此任务是 运行 异步
但是如果我删除 Thread.sleep(10000),程序不会打印。
然后我了解到这是因为睡眠阻止 ForkJoinPool 中的守护进程线程在调用 Runnable 对象上的 运行 方法之前被终止。
所以,几个问题:
- 这是否意味着ForkJoinPool启动的线程都是守护线程?为什么会这样?
- 睡眠对我们有什么帮助?
答案:
是的,因为您使用的是默认线程工厂,这就是它的配置方式。如果愿意,您可以为其提供自定义线程工厂,并且可以将线程配置为非守护进程。
睡眠有帮助,因为它可以防止您的程序退出足够长的时间,以便线程池线程找到您的任务并执行它。
在代码中:
val executor = new ForkJoinPool()
executor.execute(new Runnable{
def run = println("This task is run asynchronously")
})
Thread.sleep(10000)
此代码打印:此任务是 运行 异步
但是如果我删除 Thread.sleep(10000),程序不会打印。 然后我了解到这是因为睡眠阻止 ForkJoinPool 中的守护进程线程在调用 Runnable 对象上的 运行 方法之前被终止。
所以,几个问题:
- 这是否意味着ForkJoinPool启动的线程都是守护线程?为什么会这样?
- 睡眠对我们有什么帮助?
答案:
是的,因为您使用的是默认线程工厂,这就是它的配置方式。如果愿意,您可以为其提供自定义线程工厂,并且可以将线程配置为非守护进程。
睡眠有帮助,因为它可以防止您的程序退出足够长的时间,以便线程池线程找到您的任务并执行它。