簡體   English   中英

Java多線程在不同的操作系統上是否有所不同?

[英]Is java multithreading different on different OS?

我正在使用Java制作一個模擬餐廳的多線程程序。 我正在使用最新的Eclipse Java Oxygen來做到這一點。 我一直嘗試使用Eclipse在Windows 10和Linux Mint上運行它,並且在Windows上運行良好,但是當我在Linux上嘗試執行SAME項目時,它停止了。 在Windows和Linux上運行多線程程序之間有什么區別?

謝謝

由於Java是跨操作系統兼容的,因此無論操作系統如何,代碼都不應有差異。 這意味着,如果您有一個使用多個線程的應用程序,則只要您的實際應用程序能夠按需運行,它就可以在任何操作系統上運行。 出現這種情況的原因是Java將.java中的Java代碼轉換為.class中的byteCode,然后將其轉換為每個相應OS的匯編代碼。 Java可能已過時或未完全安裝,這可能會阻止您的程序。 如果不是這樣,那么您可以研究RAM可用性以及Linux Mint中每個程序的任何類型的線程限制。

Java中的多線程依賴操作系統來調度本機線程。 本機線程調度程序由操作系統本身在內核中實現。 它們是具有不同行為的不同代碼段。 並且它們在系統級別上也是(可能)是可調的。

是的,存在一些差異會影響Java應用程序的運行方式,但是很難弄清它們是什么……更不用說簡單地描述它們了。

您看到的問題也可能是由於不同執行平台之間的其他差異所致:存在很多可能性。 或可能是由於您的應用程序與文件系統或網絡或外部應用程序進行通信的方式,所有這些都有差異。


我建議您首先使用可用的調試工具來描述“停止”時發生的情況。 線程死了嗎? 線程是否在鎖上阻塞? Etcetera。 然后查找特定行為的特定原因。

請注意,Java線程新手有兩類“經典錯誤”:

  1. 對線程如何運行做出不必要的假設; 例如,線程被合理地調度,或者它們將以直觀的順序啟動和運行。

  2. 同步不足; 例如,當兩個或多個線程在沒有足夠同步的情況下訪問和/或修改共享變量或數據結構時。 (這可能導致無法預測的行為並且非常直觀。)

說完一切,您就可以編寫一個多線程Java程序,使其在許多平台上正常工作。 但是,除非您清楚地描述問題並向我們展示相關代碼,否則我們無法為您解決特定問題。 在這種情況下,強烈建議使用MCVE。

暫無
暫無

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

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