簡體   English   中英

每個類默認都有自己的線程嗎?

[英]Does each class have its own Thread by default?

我正在使用GUI,正在使用

Thread.sleep();

在某些類中,我想知道是否需要為我的Main類(GUI類)創建一個單獨的Thread,或者默認情況下每個類是否具有一個單獨的Thread。 注意,我調出Thread.sleep();的原因是 首先是在使用GUI的Thread.sleep(); 幾乎凍結了您的GUI。 無論如何,我的主要問題是我是否需要為我的Main類創建一個單獨的線程,或者默認情況下每個類是否具有單獨的線程。

Thread.sleep()是Thread類的靜態方法。 因此,在運行時,無論您放置在方法中的哪個類,如果線程調用流遇到此類方法,其中調用Thread.sleep()的時間都會被阻塞。

你的問題:
無論如何,我的主要問題是我是否需要為我的Main類創建一個單獨的線程,或者默認情況下每個類是否具有單獨的線程。

  • 每個類默認都有一個單獨的線程-INCORRECT語句
    -並非每個類都繼承線程類
    -從通常意義上講,線程是一個調用流程。 它執行通過其方法調用遇到的任何類。
    -類和線程是2個獨立的概念。
    ----類是一個實體的定義,它不能單獨運行,可以被加載,用數據實例化,可以進行方法調用和垃圾回收。
    ----線程是運行時的執行實體,可以啟動,運行,阻塞,停止。 為了支持這個概念,Java提供了Thread類或Runnable接口來分別擴展/實現。

  • 我需要為我的主類創建一個單獨的線程嗎?
    -您的主類將在MainThread中執行,該主線程由JVM實例化並啟動。
    -最好定義一個單獨的用戶定義線程來啟動GUI。
    -如果在MainThread(或)用戶定義的線程中,如果在調用流程中遇到Thread.sleep(),則該特定線程將被阻止。

還有一件事,您對使用Thread.sleep()的需求尚不清楚。 您只是給出了其最終用法的原因,但沒有給出用法的必要性。

從javadoc中獲取Thread

根據系統計時器和調度程序的精度和准確性,使當前正在執行的線程進入休眠狀態(暫時停止執行)達指定的毫秒數。 該線程不會失去任何監視器的所有權。

不要介意sleep()方法是靜態的,它在您調用它的線程中執行。 因此,如果從GUI調用它,它將使主UI線程進入睡眠狀態,從而完全凍結UI。

默認情況下,該程序沒有多個線程。 應該只有一個具有main方法的類。 不管是ui應用程序還是任何其他類型的應用程序都沒有關系。

請在您要使用睡眠功能的情況下發布詳細信息。

自動創建Java類時,默認情況下會使用它創建3個線程。 1.主線程2.線程調度器3.垃圾收集器線程

請觀看此說明性視頻,以了解線程實際上是什么。

在此示例中,“線程”是音樂盒,您的代碼是“紙”,授予線程的處理時間是手柄的旋轉。

因此,將您的主類代碼(紙頁)插入到JVM生成的線程(音樂盒)中,並開始執行(句柄旋轉)。 一旦調用sleep(1000) “句柄旋轉”將暫停1秒鍾,代碼執行也將暫停1秒鍾。 Thread.sleep()只是Thread.getCurrentThread().sleep()

如果現在有多個線程(音樂盒),則可以暫停一個線程,而另一個線程仍在運行。 因此,如果您有一個主線程和一個GUI線程,則可以暫停該主線程,並且GUI可以正常工作(除非它實際上試圖訪問該主線程)。 但是,如果您暫停GUI線程,它將似乎被凍結。

暫無
暫無

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

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