Java-da köp okalýan meseleler çözülýär
Aslynda, Java köp okamak iki esasy meseläni çözmek üçin oýlanyp tapyldy:-
Bir wagtyň özünde birnäçe hereketi ýerine ýetiriň.
Aboveokardaky mysalda dürli sapaklar (ýagny maşgala agzalary) paralel birnäçe hereket etdiler: gap-gaç ýuwup, dükana gitdiler, zatlary bukdular.
Has “programmist” mysal getirip bolar. Ulanyjy interfeýsi bilen programmaňyzyň bardygyny göz öňüne getiriň. Dowam etmek düwmesi basylanda programmanyň içinde käbir hasaplamalar ýüze çykmaly we ulanyjy aşakdaky interfeýs ekranyny görmeli. Bu hereketler yzygiderli ýerine ýetirilse, "Dowam et" düwmesine basanyňyzdan soň programma doňup başlar. Ulanyjy ähli içerki hasaplamalar gutarýança we programma interfeýsiň çekilip başlanjak ýerine ýetýänçä “Dowam et” düwmesi bilen şol bir ekrany görer.
Geliň, birnäçe minut garaşalyň!
Şeýle hem, programmamyzy täzeden düzüp bileris ýa-da programmistleriň aýdyşy ýaly “paralelleşip bileris”. Gerekli hasaplamalar bir sapakda, beýlekisinde interfeýs görkezilsin. Kompýuterleriň köpüsinde munuň üçin ýeterlik çeşme bar. Bu ýagdaýda programma "samsyk" bolmaz we ulanyjy içerde bolup geçýän zatlar hakda aladalanman interfeýs ekranlarynyň arasynda arkaýyn hereket eder. Päsgel bermeýär :)
-
Hasaplamalary çaltlaşdyryň.
Bu ýerde hemme zat has ýönekeý. Prosessorymyzda birnäçe ýadro bar bolsa we prosessorlaryň köpüsi indi köp ýadroly bolsa, meseleler sanawymyz paralel birnäçe ýadro bilen çözülip bilner. Elbetde, 1000 meseläni çözmeli we olaryň hersi bir sekuntda çözülmeli bolsa, bir ýadro sanawy 1000 sekuntda, iki ýadro 500 sekuntda, üçüsi bary-ýogy 333 sekuntda we ş.m. çözer.
Thread
. 10agny, 10 sapak döretmek we işletmek üçin size bu synpyň 10 obýekti gerek bolar. Iň ýönekeý mysal ýazalyň:
public class MyFirstThread extends Thread {
@Override
public void run() {
System.out.println("I'm Thread! My name is " + getName());
}
}
Sapaklary döretmek we işe girizmek üçin synp döretmeli we ondan miras almaly java.lang
. Thread
we ondaky usuly ýok et run()
. Iň soňkusy gaty möhümdir. Hut şu usul bilen, run()
sapagymyzyň ýerine ýetirmeli logikasyny belleýäris. Indi bir mysal döredip MyFirstThread
, ony işledip görsek, usul run()
konsola öz ady bilen bir setir çap eder: usul getName()
awtomatiki usulda berlen sapagyň “ulgam” adyny çap edýär. Aslynda näme üçin “eger”? Geliň, synap göreliň!
public class Main {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
MyFirstThread thread = new MyFirstThread();
thread.start();
}
}
}
Konsol çykyşy: Men mowzuk! Meniň adym “Thread-2” men mowzuk! Meniň adym Thread-1 Men mowzuk! Meniň adym Thread-0 Men mowzuk! Meniň adym “Thread-3” men mowzuk! Meniň adym “Thread-6” men mowzuk! Meniň adym “Thread-7” men mowzuk! Meniň adym Thread-4 Men mowzuk! Meniň adym “Thread-5” men mowzuk! Meniň adym Thread-9 Men mowzuk! Meniň adym “Thread-8”, obýektiň usulyna jaň edip, MyFirstThread
miras alýan we işe girizýän 10 sapak (obýekt) döredýäris . Usuly çagyrandan soň , onuň usuly işläp başlaýar we onda ýazylan logika ýerine ýetirilýär. Üns beriň: sapak atlary tertipli däl. Bu gaty geň, näme üçin öz gezeginde jezalandyrylmady : , we ş.m. Bu, adaty, “yzygiderli” pikirlenmegiň işlemejekdiginiň takyk mysaly. Hakykat, bu ýagdaýda diňe 10 sapak döretmek we işe girizmek üçin buýruklar berýäris. Olary haýsy tertipde işe girizmelidigini sapak meýilnamasy kesgitleýär: operasiýa ulgamynyň içindäki ýörite mehanizm. Onuň näderejede gurluşlydygy we haýsy prinsip boýunça karar berýändigi gaty çylşyrymly mowzuk, biz indi oňa girmeris. Rememberatda saklamaly esasy zat, programmistiň sapak ýerine ýetirilişiniň yzygiderliligini dolandyryp bilmezligi. Theagdaýyň çynlakaýlygyna düşünmek üçin usuly ýokardaky mysaldan birnäçe gezek işledip görüň. Ikinji konsol çykyşy: Men mowzuk! Meniň adym Thread-0 Men mowzuk! Meniň adym Thread-4 Men mowzuk! Meniň adym “Thread-3” men mowzuk! Meniň adym “Thread-2” men mowzuk! Meniň adym Thread-1 Men mowzuk! Meniň adym “Thread-5” men mowzuk! Meniň adym “Thread-6” men mowzuk! Meniň adym “Thread-8” men mowzuk! Meniň adym Thread-9 Men mowzuk! Meniň adym “Thread-7” üçünji konsol çykyşy: Men mowzuk! Meniň adym Thread-0 Men mowzuk! Meniň adym “Thread-3” men mowzuk! Meniň adym Thread-1 Men mowzuk! Meniň adym “Thread-2” men mowzuk! Meniň adym “Thread-6” men mowzuk! Meniň adym Thread-4 Men mowzuk! Meniň adym Thread-9 Men mowzuk! Meniň adym “Thread-5” men mowzuk! Meniň adym “Thread-7” men mowzuk! Meniň adym Thread-8Thread
start()
start()
run()
Thread-0
Thread-1
Thread-2
main()
Köp okalýan problemalar
Kitaplar bilen mysalda, köp okamagyň gaty möhüm meseleleri çözýändigini we ulanylyşynyň programmalarymyzyň işini çaltlaşdyrýandygyny gördüňiz. Köp halatlarda - köp gezek. Multöne köp okamagyň çylşyrymly mowzuk hasaplanmagy hiç zat üçin däl. Galyberse-de, nädogry ulanylsa, olary çözmegiň ýerine problemalar döredýär. "Mesele dörediň" diýlende, abstrakt bir zady aňlatmaýaryn. Köp okamagyň sebäp bolup biljek iki sany aýratyn meselesi bar: petik we ýaryş ýagdaýy. Öçürmek, köp sapaklaryň biri-biriniň eýeleýän çeşmelerine garaşýan we olaryň hiç biri-de ýerine ýetirip bilmeýän ýagdaý. Geljekki leksiýalarda bu barada has giňişleýin gürleşeris, ýöne häzirlikçe bu mysal ýeterlikdir: 1-nji sapak käbir Obýekt-1 bilen, sapak-2 bolsa Obýekt-2 bilen işleýär diýip göz öňüne getiriň. Programma şeýle ýazylýar:- “Thread-1” “Object-1” bilen işlemegi bes eder we “Thread-2” 2-nji obýekt bilen işlemegi bes edip, Obýekt-1-e geçen badyna Obýekt-2-e geçer.
- “Thread-2” “Object-2” bilen işlemegi bes eder we “Thread-1” 1-nji obýekt bilen işlemegini bes edip, Obýekt-2-e geçen badyna Obýekt-1-e geçer.
public class MyFirstThread extends Thread {
@Override
public void run() {
System.out.println("Выполнен поток " + getName());
}
}
public class Main {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
MyFirstThread thread = new MyFirstThread();
thread.start();
}
}
}
Indi programmanyň iýmit taýýarlaýan robotyň işlemegine jogapkärdigini göz öňüne getiriň! Threadumurtga-0 ýumurtgalary holodilnikden çykarýar. 1-nji akym peçde açylýar. Akym-2 gowurma tabagyny çykaryp, peje goýýar. 3-nji akym peçde ot ýakýar. 4-nji akym gazana ýag guýýar. 5-nji akym ýumurtgalary döwýär we gowurmaly. 6-njy akym gabyklary hapa zyňýar. “Stream-7” taýýar dogramaly ýumurtgalary otdan çykarýar. Potok-8 dogramaly ýumurtgalary bir tabaga goýýar. 9-njy akym gap-gaç ýuwýar. Programmamyzyň netijelerine serediň: Thread-0 ýerine ýetirilen Thread-2 sapak ýerine ýetirilen Thread-1 sapak ýerine ýetirilen Thread-4 sapak ýerine ýetirilen Thread-9 sapak ýerine ýetirilen Thread-8 sapak ýerine ýetirilen Thread-7 sapak Thread-7 ýerine ýetirildi ýerine ýetirilen sapak -3 sapak-6 sapak ýerine ýetirildi. scriptazgy gyzyklymy? :) Hemmesi, sebäbi programmamyzyň işleýşi sapaklaryň ýerine ýetirilişine baglydyr. Yzygiderliligiň sähelçe bozulmagy bilen aşhanamyz dowzaha öwrülýär we däli bolup giden robot töweregindäki ähli zady ýok edýär. Bu, köp okalýan programmirlemekde umumy mesele, bir gezekden köp eşidersiňiz. Leksiýanyň ahyrynda size köp okalýan kitap maslahat beresim gelýär.
GO TO FULL VERSION