簡體   English   中英

java多線程

[英]java multiple threads

我正在開發一個程序,該程序需要根據某些到達間隔生成線程。

  • 我有一個控件類,它在每個“間隔到達”時生成一個新線程,這些線程設置為setDaemon(true)。
  • 每個線程都在“持續時間”后停止。 (在線程中本地計算)。
  • 我已經用ExecutorService threadExecutor = Executors.newFixedThreadPool(250)實現了ExecutorService; 可以容納250個線程的引用,並可以根據需要停止所有線程。
  • 從理論上講,這是因為經過測試,僅產生了47個線程。

所以我的問題是:

  • ExecutorService有限制嗎? 我應該換成禮拜式嗎?
  • 這是JVM的限制嗎?
  • 如何通過此限制並生成新線程以保持“到達間隔”?
  • 是否有最佳方法來實現這一目標?
  • 還有一種方法可以檢測我在JVM崩潰之前可以產生的線程數嗎?

您怎么知道只產生了47個? 如果要生成線程,為什么要使用執行程序?

  • ExecutorService有限制嗎? 我應該換成禮拜式嗎?

限制取決於內存量和操作系統。 沒有固定的限制。

  • 這是JVM的限制嗎?

沒有

  • 如何通過此限制並生成新線程以保持“到達間隔”?

我不明白那個問題。

  • 是否有最佳方法來實現這一目標?

我不了解您想做什么,所以很遺憾我無法回答。

  • 還有一種方法可以檢測我在JVM崩潰之前可以產生的線程數嗎?

不可以,因為您可以創建的線程數會受到VM參數的影響。 它還將取決於操作系統,內存等。

我沒有徹底閱讀您的代碼,盡管我認為您之前產生的線程有可能已經運行完畢並死亡,因為每個調用的長度相同,並且生成新調用的速率是恆定的(取決於您的個人資料) .getCallInterarrival();)。 當您的程序首次啟動時,它將持續生成新線程,直到1分鍾后(60000),調用開始終止,並且系統將達到平衡,每個新創建的調用都會導致該調用死亡。

如果我的理論正確,則您的profile.getCallInterarrival()將返回類似1.33的值。

暫無
暫無

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

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