关于Java中的线程的一些问题

ubi*_*con 0 java multithreading executorservice threadpool

首先是一点背景.我在NetBeans中收到警告告诉我不要在构造函数中启动新线程.我已经读过它的原因是因为新线程可能会启动并尝试在构造函数实际完成对象之前引用启动线程的对象.

1.)为了实验而不是使用new Threadthread.start()我试过ExecutorService,我没有得到任何警告. 这是否意味着如果我使用的话,可以在构造函数中创建和启动新线程ExecutorService

2.)另外,如果我有ExecutorService一个缓存线程池的形式将通过标准方法创建一个新线程new Threadthread.start()从缓存池中拉出一个线程(或者如果一个线程不可用则导致它创建一个)或者这些线程是否完全独立于缓存的线程池?

aio*_*obe 5

1)[...] 这是否意味着如果我使用的话,可以在构造函数中创建和启动新线程ExecutorService

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

2)[...] 将通过标准方法创建一个新线程new Threadthread.start()从缓存池中拉出一个线程 [...]

不,没有办法new可以超载而不创建新对象.在这种情况下,您需要通过工厂方法.