/ / Je java multithreading odlišný v rôznych OS? - java, multithreading, operačný systém

Je java multithreading rôzne na rôznych OS? - java, multithreading, operačný systém

Používam java na vytvorenie programu s viacerými vláknamiktorý simuluje reštauráciu. Na to používam najnovšiu Eclipse Java Oxygen. Snažil som sa spustiť ju na Windows 10 aj na linuxovej mincovni, vždy pomocou Eclipse, a funguje to dobre na Windows, ale keď vyskúšam projekt SAME na linux, zastaví sa. Existuje nejaký rozdiel medzi spustením programu s viacerými vláknami v systéme Windows a Linuxu?

Vďaka

odpovede:

3 pre odpoveď č. 1

Pretože Java je zostavená tak, aby bola kompatibilná s viacerými osami,vo vašom kóde by nemal byť žiaden rozdiel bez ohľadu na OS. To znamená, že ak máte aplikáciu, ktorá v nej používa viacero vlákien, bude fungovať na ľubovoľnom OS, pokiaľ vaša skutočná aplikácia funguje tak, ako chcete. Dôvodom je, že Java prevádza váš kód Java v .java na byteCode v .class, ktorý sa zmení na kód zostavy pre každý príslušný OS. Niečo, čo by mohlo zastaviť váš program, je neaktuálna alebo úplne nainštalovaná Java. Ak tomu tak nie je, môžete sa pozrieť na veci, ako je dostupnosť RAM a akékoľvek obmedzenia vlákien v jednom programe v Linux Mint.


3 pre odpoveď č. 2

Multithreading v Jave sa spolieha na OS nanaplánovať natívne vlákna. Plánovače natívnych vlákien sú implementované do jadra samotným operačným systémom. Sú to rôzne kúsky kódu s rôznym správaním. A sú tiež (možno) laditeľné na úrovni systému.

Áno, existujú rozdiely, ktoré môžu ovplyvniť spôsob, akým sa spúšťa Java aplikácia, ale bolo by ťažké zistiť, aké sú ... nieto ich jednoducho opísať.

Je tiež možné, že problém stevidenie je spôsobené niektorými ďalšími rozdielmi medzi rôznymi platformami vykonávania: existuje veľa možností. Prípadne to môže byť spôsob, akým vaša aplikácia hovorí do systému súborov alebo do siete alebo do externých aplikácií, pričom všetky tieto rozdiely sú rozdielne.


Navrhujem, aby ste začali používať ladenienástroje, ktoré máte k dispozícii na charakterizáciu toho, čo sa deje, keď sa „zastaví“. Zomreli vlákna? Sú vlákna blokované na zámkoch? A tak dalej. Potom vyhľadajte konkrétne príčiny špecifického správania.

Všimnite si, že existujú dve skupiny „klasickej chyby“, ktorú robia ľudia, ktorí sú novými v vláknach v Java:

  1. Vytváranie neopodstatnených predpokladov o tom, ako vlákna fungujú; napr. že vlákna sú naplánované spravodlivo, alebo že sa budú spúšťať a spúšťať v intuitívne objednať.

  2. Nedostatočná synchronizácia; napr. keď dva alebo viac vlákien pristúpia a / alebo upravia zdieľanú premennú alebo dátovú štruktúru bez primeranej synchronizácie. (To môže viesť k nepredvídateľnému správaniu a veľmi intuitívnemu vývoju.)

Keď je všetko povedané a hotové, vy môcť napíšte viacvláknový program Java, aby fungovalsprávne na mnohých platformách. Môžeme vám však pomôcť s konkrétnymi problémami, pokiaľ problém jasne neopíšete a neukážete nám príslušný kód. V takomto prípade je spoločnosť MCVE veľmi vhodná.