gpt4 book ai didi

java - 关于Java线程的一些问题

转载 作者:行者123 更新时间:2023-12-01 16:40:41 25 4
gpt4 key购买 nike

首先介绍一下背景。我在 NetBeans 中收到警告,告诉我不要在构造函数中启动新线程。我读过,其原因是因为新线程可能会启动并尝试引用在构造函数实际完成创建对象之前启动线程的对象。

1.) 为了进行实验,我没有使用 new Threadthread.start() 我尝试了 ExecutorService 但没有得到任何结果警告。 这是否意味着如果我使用 ExecutorService 就可以在构造函数中创建并启动新线程?

2.) 另外,如果我有一个以缓存线程池形式存在的 ExecutorService,将通过 new Thread 的标准方法创建一个新线程,并且thread.start() 从缓存池中拉出一个线程(或者如果没有可用的线程则创建一个线程),或者这些线程完全独​​立于缓存线程池吗?

最佳答案

1) [...] Does this mean it is ok to create and start a new thread in a constructor if I use ExecutorService?

一般规则:在完全构造之前,不要泄漏对正在构造的对象 (this) 的引用。也就是说,不要将 this 交给构造函数中的另一个 therad,不要将自己添加为构造函数中的监听器,等等,等等...也就是说,永远不要使用 this 作为构造函数内函数的参数。

2) [...] will the creation of a new thread by the standard method of new Thread and thread.start() pull a thread from the cache pool [...]

不,new 不可能被重载而创建一个新的对象。在这种情况下,您将需要使用工厂方法。

关于java - 关于Java线程的一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3821907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com