1. gzyueqian
      13352868059

      Java培訓:JavaFX中的多線程

      更新時間: 2022-05-06 09:59:11來源: 粵嵌教育瀏覽量:9170

        幾乎所有的 GUI 平臺都使用單線程事件調度模型,JavaFX 也不例外。JavaFX 在處理多線程編程時遇到了一系列獨特的挑戰。原因是 JavaFX 主要設計為以或多或少的線性方式工作。所有用戶界面事件都在 JavaFX 應用程序線程中處理。為了充分利用現代多核機器,JavaFX 應該能夠利用 Java 編程語言的多線程。本文試圖解釋JavaFX編程外圍下的多線程原理。想學習java技術,建議考慮報名參加Java培訓,有明確的學習路線和全面系統的課程,能獲得較快提升。

        JavaFX 場景圖不是線程安全的

        JavaFX UI 設計從一個階段開始。它是頂級 UI 容器。但是,Stage 的實際實現取決于部署它的平臺,例如網頁、平板電腦或桌面。JavaFX 場景在由節點代表的演員在視覺上相互交互的舞臺上播放。場景是場景圖中所有內容的容器。JavaFX 中多線程的主要問題是場景圖本身不是線程安全的。它被建模為在單個 JavaFX 應用程序線程上執行。在 JavaFX-Launcher 線程中調用構造函數和初始化方法 init()。在 JavaFX 應用程序線程中調用 start() 和 stop() 方法。這些事件也在 JavaFX 應用程序線程上進行處理。因此,現場的任何實時操作都必須單獨在主應用程序線程上完成。

        未附加到現場場景的節點可以在其他線程中創建和操作。但是,一旦它們被附加,它們就不能被多個線程操作而不會有不正確結果的風險,因此可能會破壞場景圖。在主應用程序線程上應用的任何長時間運行的任務都必然會凍結用戶界面。從多線程編程的角度來看,這顯然是不可接受的。JavaFX 應用程序中的線程安全無法通過同步線程操作來實現。我們必須確保操作場景圖的程序只能從 JavaFX 應用程序線程中執行此操作。因此,JavaFX 中的多線程必須以不同的方式處理。通過java培訓,你可以學習更多JavaFX 中的多線程相關知識,以提高java技能。

        線程限制

        線程限制是一種與JavaFX一起應用來實現多線程的技術。這是一種只允許一個線程訪問代碼的線程不安全部分的技術,從而確保以簡單的方式實現線程安全。然而,這是在 Java 編程的許多其他領域中應用的常用技術。線程限制中的任何數據也稱為線程本地。它是線程安全的,因為線程本地環境中不能存在競爭,并且不需要鎖定數據。這種類型的線程安全可以通過池化 JDBC 對象看到。在典型的服務器應用程序中,線程從連接池中獲取連接對象。它使用該連接處理單個請求周期并將其返回到池中。在返回對它的引用之前,池不會將相同的連接對象分配給任何其他線程。因此,模式是連接管理隱式地將連接對象限制在特定線程中,并在請求期間保留或限制它。當應用于 JavaFX 編程時,這種線程管理機制被證明是非常有用的。

        


        在 JavaFX 中實現多線程

        盡管在重型 JavaFX 應用程序線程上按順序應用 GUI 組件操作的一些次要和簡短的任務是可以接受的,但只有當它們無法完全避免或產生可預測的后果時才是正確的。但是,如果任務很長,并且為了響應用戶交互,則必須在單獨的線程中處理它,因為當線程綁定到該任務時,JavaFX 應用程序線程無法呈現控件或響應事件。這肯定會導致 GUI 凍結并變得無響應。將長時間運行的任務委托給單獨的線程可以釋放 JavaFX 應用程序線程以保持響應并可以繼續管理 GUI 交互。但是,GUI 必須根據運行線程的計算結果進行更新。很多人都會選擇報java培訓班學習,可以更快速學到有用的知識和技能,節省很多時間和精力。

        runLater 方法

        JavaFX 提供了多種機制來從其他線程更新與場景圖關聯的 GUI。一種技術是調用 Platform 類中定義的靜態 void runLater (Runnable runnable) 方法。根據 Java API 文檔,此方法在未來某個未指定的時間在 JavaFX 應用程序線程上運行指定的 Runnable。此方法可以從任何線程調用,它將 Runnable 發布到事件隊列,然后立即返回給調用者。但是,需要注意的是應用程序應該避免過多的掛起的 Runnables 泛濫;否則,這可能會使應用程序無響應。因此,此類 Runnables 應該只執行小的更新以降低風險。

        使用任務和工作人員

        任何計算密集型任務都必須通過使用單獨的工作線程與 JavaFX 的主應用程序線程分離。JavaFX 提供了一個完整的包來處理多線程和并發的問題。為此,有一個名為 Worker 的接口、一個名為 Task 的抽象類和 ScheduledService。Task 基本上是一個 Worker 實現,非常適合實現長時間運行的計算。Task 類擴展了 FutureTask,因此也支持 Runnable、Future 和 RunnableFuture 接口。由于其遺留/繼承,這個類可以以各種方式使用。

        結論

        本文展示了 JavaFX 多線程的基礎知識。它還試圖說明 JavaFX 中的多線程與常規 Java 中的多線程有一些不同之處,JavaFX 中多線程的核心類在 javafx.concurrent 包中定義。在Java培訓學習中,會有很多多線程的學習課程,還有實操項目的訓練,讓你學會在項目使用這些開發工具,大大提高你的開發技能。


      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 亚洲AV色一区二区三区精品 | 亚洲中文在线码日本 | 欲求不满放荡的女老板bd中文 | 中文乱码精品视频在线 | 在线观看免费网站看v片 | 亚洲日韩在线精品视频第二页 |