ΠΠ΅ΡΠ΅ΠΏΠΈΡΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ Π² ΠΎΡΠ²Π΅Ρ Π½Π° ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ Π²ΠΎΠΏΡΠΎΡ, ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ Π² Π½Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ ΠΊΠ»Π°ΡΡΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ. ΠΠ°ΡΡΠΎΡ ΡΠ°Π· Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ 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 ();}}