鍍金池/ 問(wèn)答/Java  C  Linux/ 一個(gè)線程類(lèi)中是否可以再使用線程池來(lái)執(zhí)行任務(wù)

一個(gè)線程類(lèi)中是否可以再使用線程池來(lái)執(zhí)行任務(wù)

代碼如:

public class MyThread implements Runable {

    // 這里再定義一個(gè)線程池,用于執(zhí)行任務(wù)
    private static ExecutorService pool;

    public void run() {
        // 使用線程池執(zhí)行任務(wù)
        pool.execute(xxx)
    }
}

請(qǐng)問(wèn)這樣在一個(gè)線程類(lèi)中再定義static的線程池作為類(lèi)變量,并使用線程池在線程類(lèi)的run方法中執(zhí)行任務(wù),是否合適呢?

回答
編輯回答
九年囚

可行的,兩種情況。

首先看你的條件,MyThread類(lèi)實(shí)現(xiàn)了Runable,并且內(nèi)部創(chuàng)建一個(gè)線程池。

第一種情況,一次性任務(wù),MyThread跑完就沒(méi)了,這樣達(dá)不到線程池復(fù)用的效果。
第二種情況,循環(huán)任務(wù),假設(shè)是不斷的從一個(gè)Queue中取出數(shù)據(jù)構(gòu)造成Runable 然后pool.execute(xxx),這樣線程池才會(huì)發(fā)揮出最大的作用。

2017年4月13日 05:16
編輯回答
胭脂淚

我猜你想問(wèn)的不是可行不可行,而是這個(gè)線程會(huì)有什么樣的行為,這個(gè)線程池是掛在當(dāng)前這個(gè)線程下,還是掛在主線程下。
首先可以肯定的是可以在一個(gè)線程中創(chuàng)建另外的線程或者線程組,如果沒(méi)有特定去創(chuàng)建子線程,它們不會(huì)有隸屬關(guān)系。

2017年9月19日 20:04