Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Java: руководство для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… (Π›ΠŸ)Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 128

Автор Π¨ΠΈΠ»Π΄Ρ‚ Π“Π΅Ρ€Π±Π΅Ρ€Ρ‚

ΠŸΠ΅Ρ€Π΅ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΡΠΎΠ·Π΄Π°Π½Π½ΡƒΡŽ Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ вопрос, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² Π½Π΅ΠΉ использовались классы, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ. Наэтот Ρ€Π°Π· Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ try с рСсурсами для автоматичСского закрытия Ρ„Π°ΠΉΠ»Π°./* ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ тСкстового Ρ„Π°ΠΉΠ»Π° с Π·Π°ΠΌΠ΅Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ² дСфисами.Π’ этой вСрсии ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ.Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ, ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС ΠΈΠΌΠ΅Π½Π° исходного ΠΈ Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ². НапримСр:java Hyphen2 source targetДля компиляции этого ΠΊΠΎΠ΄Π° трСбуСтся JDK 7

ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ поздняя вСрсия Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π°./import java.io.;class Hyphen2 {public static void main(String args[])throws IOException{int i;// ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ сначала, ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Π»ΠΈ ΠΎΠ±Π° Ρ„Π°ΠΉΠ»Π°if(args.length !=2 ) {System.out.println("Usage: CopyFile From To");return;}// ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π² Π½Π΅ΠΌ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ дСфисами,// ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ try с рСсурсамиtry (FileReader fin = new FileReader(args[0]);FileWriter fout = new FileWriter(args[1])){do {i = fin.read();// ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π΅Π» Π² дСфисif((char)i == β€’ ') i =if(i != -1) fout.write(i);} while(i != β€”1);} catch(IOException exc) {System.out.println("I/O Error: " + exc);}}}

К ΠΊΠ°ΠΊΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ относится ΠΏΠΎΡ‚ΠΎΠΊ System. in?К Ρ‚ΠΈΠΏΡƒ InputStream.

Π§Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ read () ΠΈΠ· класса InputStream ΠΏΠΎ достиТСнии ΠΊΠΎΠ½Ρ†Π° ΠΏΠΎΡ‚ΠΎΠΊΠ°?Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ -1.

ΠŸΠΎΡ‚ΠΎΠΊ ΠΊΠ°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для чтСния Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…?ΠŸΠΎΡ‚ΠΎΠΊ Ρ‚ΠΈΠΏΠ° DatalnputStream.

ΠšΠ»Π°ΡΡΡ‹ Reader ΠΈ Writer находятся Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ классовсимвольного Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ try Π±Π΅Π· рСсурсов слуТит для .автоматичСского управлСния рСсурсами

Если для закрытия Ρ„Π°ΠΉΠ»Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ способ, Ρ‚ΠΎ это Π»ΡƒΡ‡ΡˆΠ΅ Π²ΡΠ΅Π³ΠΎΠ΄Π΅Π»Π°Ρ‚ΡŒ Π² Π±Π»ΠΎΠΊΠ΅ finally. Π’Π΅Ρ€Π½ΠΎ ΠΈΠ»ΠΈ Π½Π΅Π²Π΅Ρ€Π½ΠΎ?Π’Π΅Ρ€Π½ΠΎ.Π“Π»Π°Π²Π° 11. ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Каким ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ Π² Java срСдства ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ программирования ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ эффСктивныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹?БрСдства ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ программирования Π΄Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Ρ‹ простоя, Π½Π°ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΠ΅ практичСски Π² любой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Когда ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ, Π² дСйствиС Π²ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ΠΏΠΎΡ‚ΠΎΠΊΠΈ. Π’ многоядСрных систСмах Π΄Π²Π° ΠΈ большС ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

Для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ программирования Π² Java прСдусмотрСн класси интСрфСйс .Для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ программирования Π² Java прСдусмотрСн классThread ΠΈ интСрфСйс Runnable.

Π’ ΠΊΠ°ΠΊΠΈΡ… случаях слСдуСт ΠΎΡ‚Π΄Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡŽ класса Thread Π½Π°Π΄ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ интСрфСйса Runnable?ΠŸΠΎΠ΄ΠΊΠ»Π°ΡΡΡ‹, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΎΡ‚ класса Thread, цСлСсообразно ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π°, ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° run (), трСбуСтся ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ данногокласса.

ΠŸΠΎΠΊΠ°ΠΆΠΈΡ‚Π΅, ΠΊΠ°ΠΊ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° j ΠΎ in () ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° MyThrd.MyThrd.join()

ΠŸΠΎΠΊΠ°ΠΆΠΈΡ‚Π΅, ΠΊΠ°ΠΊ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ° MyThrd Π½Π° Ρ‚Ρ€ΠΈ уровня Π²Ρ‹ΡˆΠ΅ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°.MyThrd.setPriority(Thread.N0RM_PRI0RITY+3);

Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Ссли Π² объявлСнии ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово synchronized?Если ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово synchronized Π² объявлСнии ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Ρ‚ΠΎ Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ для любого Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΅Π³ΠΎ класса.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ wait () ΠΈ notify () слуТат для .взаимодСйствия ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²

ВнСситС Π² класс TickTock измСнСния для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ настоящСго ΠΎΡ‚Ρ‡Π΅Ρ‚Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.ΠŸΠ΅Ρ€Π²ΡƒΡŽ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρƒ сСкунды Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ Π½Π° экран слова "Tick", Π° Π²Ρ‚ΠΎΡ€ΡƒΡŽ β€” Π²Ρ‹Π²ΠΎΠ΄ слова "Tock". Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, сообщСниС "Tick-Tock" Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΉ сСкундС отсчитываСмого Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. (ВрСмя ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ контСкстов ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ.)Для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΡ‚Ρ‡Π΅Ρ‚Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ достаточно ввСсти Π² классС TickTock Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° sleep (), ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅.// Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ класса TickTock, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π²Π΅Π΄Π΅Π½Ρ‹ Π²Ρ‹Π·ΠΎΠ²Ρ‹// ΠΌΠ΅Ρ‚ΠΎΠ΄Π° sleep() для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ отсчСта Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.class TickTock {String state; // БостояниС часовsynchronized void tick(boolean running) {582 Javc,/: руководство для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…, 5-Π΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅if(!running) { // ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ часыstate = "ticked";notifyO; // ΡƒΠ²Π΅Π΄ΠΎΠΌΠΈΡ‚ΡŒ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈreturn;}System.out.print("Tick ");// ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ 1/2 сСкундыtry {Thread.sleep(500);} catch(InterruptedException exc) {System.out.println("Thread interrupted.");}state = "ticked"; // ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС послС Ρ‚Π°ΠΊΡ‚Π° "Ρ‚ΠΈΠΊ"notifyO; // Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° tock()try {while(!state.equals("tocked"))wait (); // ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° tock()}catch(InterruptedException exc) {System.out.println("Thread interrupted.");}synchronized void tock(boolean running) {if(!running) { // ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ часыstate = "tocked";notifyO; // ΡƒΠ²Π΅Π΄ΠΎΠΌΠΈΡ‚ΡŒ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈreturn;}System.out.println("Tock");// ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ 1/2 сСкундыtry {Thread.sleep(500);} catch(InterruptedException exc) {System.out.println("Thread interrupted.");}state = "tocked"; // ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС послС Ρ‚Π°ΠΊΡ‚Π° "Ρ‚Π°ΠΊ"notifyO; // Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° tick()try {while(!state.equals("ticked"))wait (); // ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° tick()}catch(InterruptedException exc) {System.out.println("Thread interrupted.");}ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ А. ΠžΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° вопросы для самопровСрки 583}}

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π² Π½ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Π½Π° Java Π½Π΅ слСдуСт ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ suspend (),resume() ΠΈ stop()?ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ suspend (), resume () ΠΈ stop () Π½Π΅ рСкомСндуСтся ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Ρ… ослоТнСний ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΠ· класса Thread ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ имя ΠΏΠΎΡ‚ΠΎΠΊΠ°?Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° getName ().

КакоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ is Alive () ?Он Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true, Ссли Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ исполняСтся,ΠΈΠ»ΠΈ логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ false, Ссли ΠΏΠΎΡ‚ΠΎΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½.Π“Π»Π°Π²Π° 12. ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡ, Π°Π²Ρ‚ΠΎΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠ°,

статичСский ΠΈΠΌΠΏΠΎΡ€Ρ‚ ΠΈ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ

ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Ρ‹ пСрСчислимого Ρ‚ΠΈΠΏΠ° ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ самотипизированными. Π§Ρ‚ΠΎ этоозначаСт?Π§Π°ΡΡ‚ΡŒ β€œΡΠ°ΠΌΠΎβ€ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π΅ самотипизированный ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ пСрСчислСния, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° константа. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, константа пСрСчислимого Ρ‚ΠΈΠΏΠ° являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Ρ‚ΠΎΠ³ΠΎ пСрСчислСния, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠ½Π° Π²Ρ…ΠΎΠ΄ΠΈΡ‚.

Какой класс автоматичСски Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ пСрСчислСния?ВсС пСрСчислСния Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ ΠΎΡ‚ класса Enum.

ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ для ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π½ΠΈΠΆΠ΅ пСрСчислСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄values () слуТит для отобраТСния списка констант ΠΈ ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.enum Tools {SCREWDRIVER, WRENCH, HAMMER, PLIERS}Π­Ρ‚ΠΎ Π·Π°Π΄Π°Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅:enum Tools {SCREWDRIVER, WRENCH, HAMMER, PLIERS}class ShowEnum {public static void main(String args[]) {for(Tools d : Tools.values())System.out.print(d + " has ordinal value of " +d.ordinal() + '\n');}}

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΈΠΌΠΈΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ свСтофор ΠΈ ΡΠΎΠ·Π΄Π°Π½Π½ΡƒΡŽ Π² примСрСдля опробования 12.1, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ, внСся ряд простых ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ,Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π³ΠΎΠ΄Π½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ возмоТностями пСрСчислСний. Π’ исходной вСрсииэтой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ отобраТСния ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π° свСтофора Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π»Π°ΡΡŒ Π² классС Traf ficLightSimulator, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ Π·Π°Π΄Π΅Ρ€ΠΆΠ΅ΠΊ былиТСстко Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ run (). Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ исходный ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹584 Jav\, 7: руководство для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…, 5-Π΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ отобраТСния ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π° свСтофора задавалась константами пСрСчислимого Ρ‚ΠΈΠΏΠ° Traf f icLightColor. Для этого Π²Π°ΠΌ понадобятся конструктор, пСрСмСнная экзСмпляра, объявлСнная ΠΊΠ°ΠΊ private, Π° Ρ‚Π°ΠΊΠΆΠ΅ΠΌΠ΅Ρ‚ΠΎΠ΄ getDelay (). ΠŸΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ Π΄Π°Π½Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.(Подсказка: ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° switch ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ порядковыми значСниями ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π° для ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ свСтофора.)Π£ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½Π½Π°Ρ вСрсия ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈΠΌΠΈΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρƒ свСтофора, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π½ΠΈΠΆΠ΅. Π’ Π½Π΅Π΅ внСсСны Π΄Π²Π° сущСствСнных измСнСния. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π° Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ связана Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ пСрСчислимого Ρ‚ΠΈΠΏΠ°, Ρ‡Ρ‚ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ структуру ΠΊΠΎΠ΄Π°. И Π²ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ run () ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π· ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°switch. ВмСсто этого ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ sleep () Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ пСрСдаСтся Π²Ρ‹Π·ΠΎΠ² tic. getDelay (), иблагодаря этому автоматичСски устанавливаСтся Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ°, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ Ρ†Π²Π΅Ρ‚Ρƒ свСтофора.// Π£ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½Π½Π°Ρ вСрсия ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈΠΌΠΈΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρƒ свСтофора.// Π’Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ хранятся Π² классС TrafficLightColor.// ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΠ΅ Ρ†Π²Π΅Ρ‚ΠΎΠ² ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ свСтофора,enum TrafficLightColor {RED(12000), GREEN(10000), YELLOW(2000);private int delay;TrafficLightColor(int d) {delay = d;}int getDelay() { return delay; }}// Π˜ΠΌΠΈΡ‚Π°Ρ†ΠΈΡ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ свСтофора,class TrafficLightSimulator implements Runnable {private Thread thrd; // ΠŸΠΎΡ‚ΠΎΠΊ для ΠΈΠΌΠΈΡ‚Π°Ρ†ΠΈΠΈ свСтофораprivate TrafficLightColor tic; // Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ†Π²Π΅Ρ‚Π°boolean stop = false; // ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° ΠΈΠΌΠΈΡ‚Π°Ρ†ΠΈΠΈ, Ссли истинноboolean changed = false; // ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ свСтофора, Ссли истинноTrafficLightSimulator(TrafficLightColor init) {tic = init;thrd = new Thread(this);thrd.start();}TrafficLightSimulator() {tic = TrafficLightColor.RED;thrd = new Thread(this);thrd.start();}// Запуск ΠΈΠΌΠΈΡ‚Π°Ρ†ΠΈΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ свСтофора.ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ А. ΠžΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° вопросы для самопровСрки 585public void run() {while(!stop) {// По ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ вСрсиСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹// ΠΊΠΎΠ΄ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ упростился!try {Thread.sleep(tlc.getDelay());} catch(InterruptedException exc) {System.out.println(exc);}changeColor ();}}// ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Ρ†Π²Π΅Ρ‚Π° свСтофора,synchronized void changeColor() {switch(tic) {case RED:tic = TrafficLightColor.GREEN;break;case YELLOW:tic = TrafficLightColor.RED;break;case GREEN:tic = TrafficLightColor.YELLOW;}changed = true;notify(); // ΡƒΠ²Π΅Π΄ΠΎΠΌΠΈΡ‚ΡŒ ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ Ρ†Π²Π΅Ρ‚Π° свСтофора}// ОТиданиС ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ†Π²Π΅Ρ‚Π° свСтофора,synchronized void waitForChange() {try {while(!changed)wait(); // ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ†Π²Π΅Ρ‚Π° свСтофораchanged = false;} catch(InterruptedException exc) {System.out.println(exc);}}// Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Ρ†Π²Π΅Ρ‚Π°.TrafficLightColor getColor() {return tic;}// ΠŸΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΈΠΌΠΈΡ‚Π°Ρ†ΠΈΠΈ свСтофора,void cancel() {stop = true;class TrafficLightDemo {public static void main(String args[]) {TrafficLightSimulator tl =new TrafficLightSimulator(TrafficLightColor.GREEN);for(int i=0; i < 9; i++) {System.out.println(tl.getColor());tl.waitForChange();}tl.cancel ();}}