JavaRush /Java Blog /Random-TK /Iň gowy 50 Java sorag soraglary we jogaplary. 3-nji bölüm...

Iň gowy 50 Java sorag soraglary we jogaplary. 3-nji bölüm

Toparda çap edildi
Iň gowy 50 Java sorag soraglary we jogaplary. 1-nji bölüm “Java 50” esasy söhbetdeşlik soraglary we jogaplary. 2-nji bölüm

Köp okamak

37. Java-da täze sapak (akym) nädip döretmeli?

Bu ýa-da başga bir ýol, sapak synpynyň kömegi bilen ýüze çykýar. Emma bu ýerde wariantlar bolup biler ...
  1. Biz miras aldykjava.lang.Thread
  2. java.lang.RunnableObýekti konstruktor Threadsynpyny kabul edýän interfeýsi durmuşa geçirýäris
Geliň, olaryň hersi hakda gürleşeliň.

Sapak synpyndan miras alýarys

Bu işi etmek üçin synpymyzda miras alýarys java.lang.Thread. run()Onda bize zerur zat bolan met bar . Täze sapagyň bütin ömri we logikasy şu usulda bolar. mainBu täze sapak üçin bir usul. Ondan soň galan zat, synpymyzyň obýektini döretmek we start()täze sapak döreder we onda ýazylan logikany işletjek usuly ýerine ýetirmekdir. Geliň seredeliň:
/**
* Пример того, How создавать треды путем наследования {@link Thread} класса.
*/
class ThreadInheritance extends Thread {

   @Override
   public void run() {
       System.out.println(Thread.currentThread().getName());
   }

   public static void main(String[] args) {
       ThreadInheritance threadInheritance1 = new ThreadInheritance();
       ThreadInheritance threadInheritance2 = new ThreadInheritance();
       ThreadInheritance threadInheritance3 = new ThreadInheritance();
       threadInheritance1.start();
       threadInheritance2.start();
       threadInheritance3.start();
   }
}
Konsol çykyşy şeýle bolar:

Thread-1
Thread-0
Thread-2
.Agny, bu ýerde-de sapaklaryň öz gezeginde däl-de, JVM-iň karary boýunça ýerine ýetirilendigini görýäris)

Işläp bolýan interfeýsi durmuşa geçirmek

Mirasa garşy bolsaňyz we / ýa-da eýýäm beýleki synplaryň birini miras alsaňyz, ulanyp bilersiňiz java.lang.Runnable. Bu ýerde synpymyzda bu interfeýsi durmuşa geçirýäris we run()şol mysalda bolşy ýaly usuly durmuşa geçirýäris. Diňe has köp obýekt döretmeli Thread. Has köp setir has erbet ýaly. Emma mirasyň nähili zyýanlydygyny we ähli ýollardan gaça durmagyň has gowudygyny bilýäris;) Geliň seredeliň:
/**
* Пример того, How создавать треды из интерфейса {@link Runnable}.
* Здесь проще простого - реализуем этот интерфейс и потом передаем в конструктор
* экземпляр реализуемого an object.
*/
class ThreadInheritance implements Runnable {

   @Override
   public void run() {
       System.out.println(Thread.currentThread().getName());
   }

   public static void main(String[] args) {
       ThreadInheritance runnable1 = new ThreadInheritance();
       ThreadInheritance runnable2 = new ThreadInheritance();
       ThreadInheritance runnable3 = new ThreadInheritance();

       Thread threadRunnable1 = new Thread(runnable1);
       Thread threadRunnable2 = new Thread(runnable2);
       Thread threadRunnable3 = new Thread(runnable3);

       threadRunnable1.start();
       threadRunnable2.start();
       threadRunnable3.start();
   }
}
Jezalandyryş netijesi:

Thread-0
Thread-1
Thread-2

38. Bir proses bilen sapagyň arasynda näme tapawut bar?

Iň gowy 50 Java sorag soraglary we jogaplary.  3-nji bölümBir proses bilen sapagyň arasynda aşakdaky tapawutlar bar:
  1. Executionerine ýetirilýän programma prosess diýilýär, mowzuk bolsa prosesiň bir bölegi.
  2. Amallar garaşsyz, sapaklar bolsa prosesiň bir bölegi.
  3. Amallar ýatda dürli salgy meýdanyna eýe, sapaklarda umumy salgy meýdany bar.
  4. Kontekstiň kommutasiýasy prosesler bilen deňeşdirilende sapaklaryň arasynda has çalt.
  5. Aragatnaşyk aragatnaşygy, aragatnaşygyň aragatnaşygyndan has haýal we gymmat.
  6. Ene-atanyň islendik üýtgemegi çaganyň işine täsir etmeýär, ene-atanyň üýtgemegi çaga sapagyna täsir edip biler.

39. Köp okamagyň artykmaçlyklary näme?

Iň gowy 50 Java sorag soraglary we jogaplary.  3-nji bölüm
  1. Köp okamak, bir programma / programma, käbir fon meselelerini ýerine ýetirýän hem bolsa, girişlere hemişe jogap bermäge mümkinçilik berýär;
  2. Köp okamak size sapaklary has çalt ýerine ýetirmäge mümkinçilik berýär, sebäbi sapaklar özbaşdak ýerine ýetirilýär;
  3. Köp okalma keş keşini has gowy ulanmagy üpjün edýär, sebäbi sapaklar umumy ýat çeşmelerini paýlaşýar;
  4. Köp okamak zerur serweriň mukdaryny azaldar, sebäbi bir serwer bir wagtyň özünde birnäçe sapak işledip biler.

40. Bir sapagyň ýaşaýyş siklinde nähili ýagdaýlar bar?

Iň gowy 50 Java sorag soraglary we jogaplary.  3-nji bölüm
  1. Täze: Bu ýagdaýda Threadtäze operatoryň kömegi bilen synp obýekti döredilýär, ýöne sapak ýok. Sapak jaň edýänçäk başlamaz start().
  2. Işläp bolýan: Bu ýagdaýda sapak usuly çagyrandan soň işlemäge taýyn başla (). Şeýle-de bolsa, entek sapak meýilleşdiriji tarapyndan saýlanmady.
  3. Işleýiş: Bu ýagdaýda sapak meýilleşdirijisi taýýar ýagdaýdan bir sapak saýlaýar we işleýär.
  4. Garaşmak / Bloklamak: Bu ýagdaýda sapak işlemeýär, ýöne henizem diri ýa-da başga bir sapagyň gutarmagyna garaşýar.
  5. Öli / ýatyrylan: Usul çykanda, run()sapak kesilen ýa-da öli ýagdaýda bolýar.

41. Bir sapagy iki gezek başlamak mümkinmi?

, Ok, sapagy täzeden açyp bilmeris, sebäbi sapak başlanyp we ýerine ýetirilenden soň Öli ýagdaýyna geçýär. Şonuň üçin sapagy iki gezek işletjek bolsak, iş wagty " java.lang.IllegalThreadStateException " iş wagty çykar . Geliň seredeliň:
class DoubleStartThreadExample extends Thread {

   /**
    * Имитируем работу треда
    */
   public void run() {
	// что-то происходит. Для нас не существенно на этом этапе
   }

   /**
    * Запускаем тред дважды
    */
   public static void main(String[] args) {
       DoubleStartThreadExample doubleStartThreadExample = new DoubleStartThreadExample();
       doubleStartThreadExample.start();
       doubleStartThreadExample.start();
   }
}
Eser şol bir sapagyň ikinji başlangyjyna ýeten badyna kadadan çykma bolar. Özüňiz synap görüň;) ýüz gezek eşitmekden bir gezek görmek has gowudyr.

42. Başlamak () usulyna jaň etmän göni run () usuly diýseňiz näme bolar?

Hawa, run()elbetde bir usula jaň edip bilersiňiz, ýöne bu täze sapak döretmez we aýratyn sapak hökmünde ýerine ýetirmez. Bu ýagdaýda ýönekeý usul diýilýän ýönekeý bir zat. Usul hakda aýdýan bolsak start(), başga mesele. Bu usuly işe girizip, runtimetäzesini işe girizýär we öz gezeginde usulymyzy işledýär;) Maňa ynanmasaňyz, synap görüň:
class ThreadCallRunExample extends Thread {

   public void run() {
       for (int i = 0; i < 5; i++) {
           System.out.print(i);
       }
   }

   public static void main(String args[]) {
       ThreadCallRunExample runExample1 = new ThreadCallRunExample();
       ThreadCallRunExample runExample2 = new ThreadCallRunExample();

       // просто будут вызваны в потоке main два метода, один за другим.
       runExample1.run();
       runExample2.run();
   }
}
Konsolyň çykyşy şeýle bolar:

0123401234
Hiç hili sapak döredilmändigini görmek bolýar. Hemme zat adaty synp ýaly işledi. Ilki birinji synp usuly işledi, soň ikinjisi.

43. Daemon sapagy näme?

Iň gowy 50 Java sorag soraglary we jogaplary.  3-nji bölümDaemon sapagy (mundan beýläk daemon sapagy diýilýär) başga bir sapak bilen baglanyşykly fonda işleri ýerine ýetirýän sapakdyr. .Agny, onuň işi diňe başga (esasy) sapak bilen bilelikde edilmeli kömekçi işleri ýerine ýetirmekdir. Awtomatiki usulda işleýän köp sanly daemon sapaklary bar, meselem, Zibil ýygnaýjy, jemleýji we ş.m.

Java näme üçin daemon sapagyny ýapýar?

Daemon sapagynyň ýeke-täk maksady, fonda goldaw meselesi üçin ulanyjy sapagyna hyzmatlar bermekdir. Şonuň üçin esasy sapak gutaran bolsa, iş wagty ähli daemon sapaklaryny awtomatiki ýapýar.

Sapak synpynda işlemegiň usullary

Synp sapak java.lang.Threaddaemon bilen işlemek üçin iki usuly hödürleýär:
  1. public void setDaemon(boolean status)- munuň daemon sapagy boljakdygyny görkezýär. Dymmaklyk false, aýratyn görkezilmedik bolsa, daemon däl sapaklaryň dörediljekdigini aňladýar.
  2. public boolean isDaemon()daemon- aslynda bu öňki usuly ulanyp kesgitlän üýtgeýjimiz .
Mysal:
class DaemonThreadExample extends Thread {

   public void run() {
       // Проверяет, демон ли этот поток or нет
       if (Thread.currentThread().isDaemon()) {
           System.out.println("daemon thread");
       } else {
           System.out.println("user thread");
       }
   }

   public static void main(String[] args) {
       DaemonThreadExample thread1 = new DaemonThreadExample();
       DaemonThreadExample thread2 = new DaemonThreadExample();
       DaemonThreadExample thread3 = new DaemonThreadExample();

       // теперь thread1 - поток-демон.
       thread1.setDaemon(true);

       System.out.println("демон?.. " + thread1.isDaemon());
       System.out.println("демон?.. " + thread2.isDaemon());
       System.out.println("демон?.. " + thread3.isDaemon());

       thread1.start();
       thread2.start();
       thread3.start();
   }
}
Konsol çykyşy:

демон?.. true
демон?.. false
демон?.. false
daemon thread
user thread
user thread
Çykyşdan, sapagyň içinde statiki currentThread()usul ulanyp, bir tarapdan haýsy sapakdygyny bilip bileris, beýleki tarapdan, bu sapagyň obýektine salgylanma bar bolsa, tapyp bileris. gönüden-göni ondan. Bu konfigurasiýada zerur çeýeligi berýär.

44. Bir sapak döredilenden soň daemon ýasap bolarmy?

No.ok. Şeýle etseňiz, kadadan çykma bolar IllegalThreadStateException. Şonuň üçin diňe daemon sapagyny başlamazdan öň döredip bileris. Mysal:
class SetDaemonAfterStartExample extends Thread {

   public void run() {
       System.out.println("Working...");
   }

   public static void main(String[] args) {
       SetDaemonAfterStartExample afterStartExample = new SetDaemonAfterStartExample();
       afterStartExample.start();

       // здесь будет выброшено исключение
       afterStartExample.setDaemon(true);
   }
}
Konsol çykyşy:

Working...
Exception in thread "main" java.lang.IllegalThreadStateException
	at java.lang.Thread.setDaemon(Thread.java:1359)
	at SetDaemonAfterStartExample.main(SetDaemonAfterStartExample.java:14)

45. Öçürmek näme?

“Shutdownhook” , JVM (Java Wirtual Machine) ýapylmanka aç-açan atlandyrylýan sapak. Şeýlelik bilen, Java Wirtual Machine adaty ýa-da birden ýapylanda çeşmäni arassalamak ýa-da ýagdaýy tygşytlamak üçin ulanyp bileris. shutdown hookAşakdaky usuly ulanyp goşup bileris :
Runtime.getRuntime().addShutdownHook(new ShutdownHookThreadExample());
Mysalda görkezilişi ýaly:
/**
* Программа, которая показывает How запустить shutdown hook тред,
* который выполнится аккурат до окончания работы JVM
*/
class ShutdownHookThreadExample extends Thread {

   public void run() {
       System.out.println("shutdown hook задачу выполнил");
   }

   public static void main(String[] args) {

       Runtime.getRuntime().addShutdownHook(new ShutdownHookThreadExample());

       System.out.println("Теперь программа засыпает, нажмите ctrl+c чтоб завершить ее.");
       try {
           Thread.sleep(60000);
       } catch (InterruptedException e) {
           e.printStackTrace();
       }
   }
}
Konsol çykyşy:

Теперь программа засыпает, нажмите ctrl+c чтоб завершить ее.
shutdown hook задачу выполнил

46. ​​Sinhronizasiýa näme?

Java-da sinhronizasiýa, köp sapaklaryň islendik umumy çeşmä girmegine gözegçilik etmek ukybydyr. Birnäçe sapak şol bir işi ýerine ýetirmäge synanyşanda, ýalňyş netijäniň bolmagy mümkin, şonuň üçin bu meseläni ýeňip geçmek üçin Java sinhronizasiýa ulanýar, şol sebäpli bir gezekde diňe bir sapak işläp bilýär. Sinhronizasiýa üç ýol bilen gazanylyp bilner:
  • Sinhronlamak usuly
  • Belli bir bloky sinhronlamak arkaly
  • Statik sinhronizasiýa

Usuly sinhronlamak

Sinhronlaşdyrylan usul, islendik umumy çeşme üçin obýekti gulplamak üçin ulanylýar. Bir sapak sinhronlaşdyrylan usul diýlende, awtomatiki usulda şol obýektiň gulpuny alýar we sapak ýumuş gutarandan soň goýberilýär. Işlemegi üçin sinhronlaşdyrylan açar söz goşmaly . Munuň mysal bilen nähili işleýändigini göreliň:
/**
* Пример, где мы синхронизируем метод. То есть добавляем ему слово synchronized.
* Есть два писателя, которые хотят использовать один принтер. Они подготовor свои поэмы
* И конечно же не хотят, чтоб их поэмы перемешались, а хотят, чтоб работа была сделана по * * * очереди для каждого из них
*/
class Printer {

   synchronized void print(List<String> wordsToPrint) {
       wordsToPrint.forEach(System.out::print);
       System.out.println();
   }

   public static void main(String args[]) {
       // один an object для двух тредов
       Printer printer  = new Printer();

       // создаем два треда
       Writer1 writer1 = new Writer1(printer);
       Writer2 writer2 = new Writer2(printer);

       // запускаем их
       writer1.start();
       writer2.start();
   }
}

/**
* Писатель номер 1, который пишет свою поэму.
*/
class Writer1 extends Thread {
   Printer printer;

   Writer1(Printer printer) {
       this.printer = printer;
   }

   public void run() {
       List<string> poem = Arrays.asList("Я ", this.getName(), " Пишу", " Письмо");
       printer.print(poem);
   }

}

/**
* Писатель номер 2, который пишет свою поэму.
*/
class Writer2 extends Thread {
   Printer printer;

   Writer2(Printer printer) {
       this.printer = printer;
   }

   public void run() {
       List<String> poem = Arrays.asList("Не Я ", this.getName(), " Не пишу", " Не Письмо");
       printer.print(poem);
   }
}
Konsolyň çykyşy:

Я Thread-0 Пишу Письмо
Не Я Thread-1 Не пишу Не Письмо

Sinhronizasiýa bloky

Sinhronlaşdyrylan blok islendik ýörite usul çeşmesinde sinhronizasiýa etmek üçin ulanylyp bilner. Uly usulda (hawa, hawa, beýle zatlary ýazyp bilmersiňiz, ýöne käwagt şeýle bolýar) aýdalyň, käbir sebäplere görä diňe kiçi bölegini sinhronlamaly. Usulyň ähli kodlaryny sinhron blokda goýsaňyz, sinhronlaşdyrylan usul ýaly işlär. Sintaksis şeýle görünýär:
synchronized (“an object для блокировки”) {
   // сам code, который нужно защитить
}
Öňki mysaly gaýtalamazlyk üçin, näbelli synplaryň üsti bilen sapaklar dörederis, ýagny “Runnable” interfeýsini derrew durmuşa geçireris.
/**
* Вот How добавляется блок синхронизации.
* Внутри нужно указать у кого будет взят мьютекс для блокировки.
*/
class Printer {

   void print(List<String> wordsToPrint) {
       synchronized (this) {
           wordsToPrint.forEach(System.out::print);
       }
       System.out.println();
   }

   public static void main(String args[]) {
       // один an object для двух тредов
       Printer printer = new Printer();

       // создаем два треда
       Thread writer1 = new Thread(new Runnable() {
           @Override
           public void run() {
               List<String> poem = Arrays.asList("Я ", "Writer1", " Пишу", " Письмо");
               printer.print(poem);
           }
       });
       Thread writer2 = new Thread(new Runnable() {
           @Override
           public void run() {
               List<String> poem = Arrays.asList("Не Я ", "Writer2", " Не пишу", " Не Письмо");
               printer.print(poem);
           }
       });

       // запускаем их
       writer1.start();
       writer2.start();
   }
}

}
we konsola çykmak

Я Writer1 Пишу Письмо
Не Я Writer2 Не пишу Не Письмо

Statik sinhronizasiýa

Statik usuly sinhronlaşdyrsaňyz, gulp obýektde däl-de, synpda bolar. Bu mysalda sinhronlaşdyrylan açar sözi statiki sinhronizasiýany ýerine ýetirmek üçin statiki usula ulanýarys:
/**
* Вот How добавляется блок синхронизации.
* Внутри нужно указать у кого будет взят мьютекс для блокировки.
*/
class Printer {

   static synchronized void print(List<String> wordsToPrint) {
       wordsToPrint.forEach(System.out::print);
       System.out.println();
   }

   public static void main(String args[]) {

       // создаем два треда
       Thread writer1 = new Thread(new Runnable() {
           @Override
           public void run() {
               List<String> poem = Arrays.asList("Я ", "Writer1", " Пишу", " Письмо");
               Printer.print(poem);
           }
       });
       Thread writer2 = new Thread(new Runnable() {
           @Override
           public void run() {
               List<String> poem = Arrays.asList("Не Я ", "Writer2", " Не пишу", " Не Письмо");
               Printer.print(poem);
           }
       });

       // запускаем их
       writer1.start();
       writer2.start();
   }
}
we konsola çykyş:

Не Я Writer2 Не пишу Не Письмо
Я Writer1 Пишу Письмо

47. Üýtgeýän üýtgeýän näme?

Açar söz, volatilesapaklaryň howpsuzlygyny üpjün etmek üçin köp sapakly programmirlemekde ulanylýar, sebäbi bir üýtgeýän üýtgeýjiniň üýtgemegi beýleki sapaklaryň hemmesine görünýär, şonuň üçin bir üýtgeýjini bir gezekde bir sapak ulanyp bolýar. Açar söz ulanyp, volatileüýtgeýjiniň sapakdan howpsuz boljakdygyny we umumy ýatda saklanjakdygyny kepillendirip bilersiňiz we sapaklar ony keş görnüşine almaz. Nämä meňzeýär?
private volatile AtomicInteger count;
Diňe üýtgeýjä goşýarys volatile. Thisöne bu doly sapak howpsuzlygyny aňlatmaýar ... Galyberse-de, üýtgeýjide amallar atom bolup bilmez. AtomicTheöne amaly atomiki ýerine ýetirýän sapaklary, ýagny prosessor tarapyndan bir ýerine ýetirişde ulanyp bilersiňiz . Şeýle sapaklaryň köpüsini bukjada tapyp bilersiňiz java.util.concurrent.atomic.

48. Gulp näme

Java-da petiklemek köp okalmagyň bir bölegidir. Bir sapak başga bir sapak bilen alnan obýekt gulpuna garaşýan, ikinji sapak bolsa birinji sapakdan alnan obýekt gulpuna garaşýan ýagdaýynda ýüze çykyp biler. Şeýlelik bilen, bu iki sapak biri-birine garaşýarlar we kodlaryny ýerine ýetirmegi dowam etdirmezler. Iň gowy 50 Java sorag soraglary we jogaplary.  3-nji bölüm“Runnable” -y ýerine ýetirýän synpyň bir mysalyna seredeliň. Konstruktorynda iki çeşmäni kabul edýär. Run () usulynyň içinde olar üçin gulpy birin-birin alýar, şonuň üçin bu synpyň iki obýektini döredip, çeşmeleri dürli sargytlarda geçirseňiz, aňsatlyk bilen gulplap bilersiňiz:
class DeadLock {

   public static void main(String[] args) {
       final Integer r1 = 10;
       final Integer r2 = 15;

       DeadlockThread threadR1R2 = new DeadlockThread(r1, r2);
       DeadlockThread threadR2R1 = new DeadlockThread(r2, r1);

       new Thread(threadR1R2).start();
       new Thread(threadR2R1).start();
   }
}

/**
* Класс, который принимает два ресурса.
*/
class DeadlockThread implements Runnable {

   private final Integer r1;
   private final Integer r2;

   public DeadlockThread(Integer r1, Integer r2) {
       this.r1 = r1;
       this.r2 = r2;
   }

   @Override
   public void run() {
       synchronized (r1) {
           System.out.println(Thread.currentThread().getName() + " захватил ресурс: " + r1);

           try {
               Thread.sleep(1000);
           } catch (InterruptedException e) {
               e.printStackTrace();
           }

           synchronized (r2) {
               System.out.println(Thread.currentThread().getName() + " захватил ресурс: " + r2);
           }
       }
   }
}
Konsol çykyşy:

Первый тред захватил первый ресурс
Второй тред захватывает второй ресурс

49. Näsazlykdan nädip saklanmaly?

Näsazlygyň nähili ýüze çykýandygyny bilýänlerimize esaslanyp, käbir netijeleri çykaryp bileris ...
  • Aboveokardaky mysalda görkezilişi ýaly, gulplama höwürtge sebäpli ýüze çykdy. .Agny, bir gulpuň içinde başga ýa-da has köp zat bar. Aşakdaky usuldan gaça durup bilersiňiz - höwürtge etmegiň ýerine, üstünde täze abstraksiýa goşup, gulpy has ýokary derejä çykarmaly we höwürtgelenen gulplary aýyrmaly.
  • Näçe köp petiklense, petiklenmek mümkinçiligi şonça-da köp bolar. Şonuň üçin her gezek gulp goşanyňyzda, hakykatdanam zerurmy ýa-da täzesini goşmagyň öňüni alyp bolarmy diýip pikirlenmeli.
  • Ulanylyşy Thread.join(). Bir sapak beýlekisine garaşýan mahaly petik hem edilip bilner. join()Bu meseläniň öňüni almak üçin usula wagt bellemegi göz öňünde tutup bilersiňiz .
  • Bir sapagymyz bar bolsa, petik bolmaz;)

50. racearyş ýagdaýy nähili?

Hakyky ýaryşlarda awtoulaglar ýerine ýetirýän bolsa, köp sapakly ýaryş terminologiýasynda ýaryşlarda sapaklar ýerine ýetirilýär. Emma näme üçin? Işleýän we şol bir obýekte girip bilýän iki sapak bar. Şol bir wagtyň özünde döwleti täzelemäge synanyşyp bilerler. Şu wagta çenli hemme zat düşnükli, şeýlemi? Şeýlelik bilen sapaklar hakyky paralel (prosessorda birden köp ýadro bar bolsa) ýa-da prosessor gysga wagt bölüp berlende şertli ýagdaýda paralel işleýär. Bu amallara gözegçilik edip bilmeris, şonuň üçin bir sapak obýektden maglumatlary okasa, başga bir sapak etmezden ozal ony üýtgetmäge wagt boljakdygyny kepillendirip bilmeris. Munuň ýaly meseleler bu synag-hereket kombinasiýasy geçende ýüze çykýar. Bu näme many berýär? Mysal üçin, ifbedenimizde ýagdaýyň özi üýtgeýän bir aňlatma bar, ýagny:
int z = 0;

// проверь
if (z < 5) {
//действуй
   z = z + 5;
}
Şonuň üçin iki sapak bir wagtyň özünde z kody nola deň bolan we bilelikde bilelikde bu bahany üýtgedýän bir wagtyň özünde bu kod blokyna girýän bir ýagdaý bolup biler. Netijede, garaşylýan bahany 5 däl, 10-a ýeteris. Munuň öňüni nädip almaly? Executionerine ýetirilmezden ozal we soň gulplamaly. .Agny, birinji sapaga blok girmek if, ähli hereketleri ýerine ýetirmek, ony üýtgetmek zwe diňe indiki sapaga muny etmäge mümkinçilik bermek. Emma indiki sapak bloka girmez if, sebäbi zeýýäm 5-e deň bolar:
// получить блокировку для z
if (z < 5) {
   z = z + 5;
}
// выпустить из блокировки z
===================================================

Çykyşyň ýerine

Ahyryna çenli okanlaryň hemmesine sag bolsun aýdasym gelýär. Uzak ýol boldy we muny etdiň! Hemme zat düşnükli bolup bilmez. Bu gowy. Java öwrenip başlanymdan, statiki üýtgeýjiniň nämedigini kelläme öwrüp bilmedim. Nothingöne hiç zat, bu pikir bilen ukladym, ýene birnäçe çeşmäni okadym we ahyrsoňy düşündim. Söhbetdeşlige taýýarlyk, praktiki däl-de, akademiki meseledir. Şonuň üçin her söhbetdeşlikden öň ýygy-ýygydan ulanyp bilmejek zatlaryňyzy ýatda saklamaly we täzelemeli.

Hemişe bolşy ýaly peýdaly baglanyşyklar:

Okanyňyz üçin hemmäňize sag boluň, ýakynda görüşeris) GitHub-daky profilim
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION