簡體   English   中英

如何在Android中的onCreate()中啟動多個線程而不使用for循環啟動線程(IllegalThreadStateException)?

[英]How Do I start multiple threads in Android in onCreate() without getting Thread Already started (IllegalThreadStateException) using for loop?

我正在執行一個應用程序的負載測試,並且有5個線程。我希望所有線程都可以隨機運行,因此知道設備上的負載。 假設運行所有線程的次數為5,則所有線程應成功運行5次而沒有IllegalThreadStateException。 我知道多次啟動一個線程是不正確的,那么如何通過while和for循環來實現呢? 我已經寫了一個示例,但得到了例外。

int count = 5;
for(int i = 0; i < count; i++){
    System.out.println("Loop " + i);

    try {
        th.start();
        th2.start();
        smart.start();
        fpthread.start();
        idthread.start();

        System.out.println("The count is " +count);
    } catch (Exception e) {
        e.printStackTrace();
    }

 }

編輯1:來了解ExecutorService框架和Threadpool的概念並進行了研究。 通過使用ExecutorService是否可以實現上述方案?
喜歡..

1.創建一個ExecutorService實例,
2.固定線程池的數量,
3.創建一個列表對象,
4.使用Iterator檢查下一個元素,
5.將線程添加到List對象,最后通過ExecutorService對象執行。
我的想法和過程正確嗎?

**如果問我的問題或程序的方式有誤,請糾正我,而不要因為我是新手而投票。

如您所知,啟動一個線程不能超過一次。 因此,無需在每次迭代中啟動相同的線程,而是需要創建一個新的Thread。

List<Thread> threads = new ArrayList<>();
for(int i = 0;i < 5;i++){
    Thread thread = new Thread();
    thread.start();
    threads.add(thread);
}

根據我的理解,您希望重復執行該任務多次。

  1. 選項1 [不推薦]您可以在循環中每次創建新線程,然后啟動。 創建線程的成本很高,這會帶來性能問題。

  2. 選項2。 創建線程一次,然后啟動一次。 然后,您可以在線程的每個運行方法(或關聯的Runnable)中運行一個while循環,並具有一個易失性標志,您可以將其設置為false,以中斷每個線程的run方法的while循環。 可能是您可以為創建的每個線程分配單獨的標志,並計算while循環的迭代次數。 當計數等於您希望執行任務的次數時,您只需決定將標志設置為false即可中斷循環。 您還可以設置中斷並在while循環中檢查線程是否已被中斷。 這樣,您將不需要單獨的標志。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM