#4(5). #0(4)
#1(2). #2(2)
#1(Liftoff") */// _ #2(9). #3(9) #4(7). #0(6) #1(4). #2(4) #3(2). #4(2) #2(Liftoff!) #4(9). #0(8) #1(6). #2(6) #3(4). #4(4) #0(1). #1(1) #3(Liftoff!) #1(8). #2(8) #3(6). #4(6) #0(3). #1(3) #2(1). #3(1) #4(Liftoff!)
#3(8). #4(8). #0(7). #1(7).
#0(5). #1(5). #2(5). #3(5).
#2(3). #3(3). #4(3). #0(2).
#4(1). #0(Liftoff1).
ΠΡΠ·ΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Π° sleep() ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ InterruptedException; ΠΏΠ΅ΡΠ΅Ρ Π²Π°Ρ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°Π½ Π² run(). ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π½Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΡΡΡΡ ΠΏΠΎ ΠΏΠΎΡΠΎΠΊΠ°ΠΌ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² main(), Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ Π»ΡΠ±ΡΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠΈΠ΅ Π²Π½ΡΡΡΠΈ Π·Π°Π΄Π°ΡΠΈ.
Π Java SE5 ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ Π½ΠΎΠ²Π°Ρ Π²Π΅ΡΡΠΈΡ sleep(), ΠΎΡΠΎΡΠΌΠ»Π΅Π½Π½Π°Ρ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΊΠ»Π°ΡΡΠ° Timellnit; ΠΎΠ½Π° ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°Π½Π° Π² ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅. ΠΠ½Π° Π΄Π΅Π»Π°Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π±ΠΎΠ»Π΅Π΅ Π½Π°Π³Π»ΡΠ΄Π½ΠΎΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠ°Π·Π°ΡΡ Π΅Π΄ΠΈΠ½ΠΈΡΡ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ. ΠΠ»Π°ΡΡ Timellnit ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΉ, ΠΊΠ°ΠΊ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π΄Π°Π»Π΅Π΅ Π² ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅.
ΠΠ° Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°Ρ Π·Π°Π΄Π°ΡΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ Β«ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡΒ» β ΠΎΡ 0 Π΄ΠΎ 4, Π·Π°ΡΠ΅ΠΌ ΡΠ½ΠΎΠ²Π° ΠΎΡ 4 Π΄ΠΎ 0. ΠΡΠΎ Π²ΠΏΠΎΠ»Π½Π΅ Π»ΠΎΠ³ΠΈΡΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠΎΡΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π²ΡΠ²ΠΎΠ΄Π° Π·Π°Π΄Π°ΡΠ° ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΡΡΡ Π½Π° Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΡΠ°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ°, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π½Π° Π½Π΅Π³ΠΎ Π½Π΅Π»ΡΠ·Ρ. ΠΡΠ»ΠΈ Π²Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ (ΡΠΌ. Π΄Π°Π»Π΅Π΅) ΠΈΠ»ΠΈ ΠΆΠ΅ Π²ΠΎΠΎΠ±ΡΠ΅ ΠΎΡΠΊΠ°ΠΆΠΈΡΠ΅ΡΡ ΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΈ Π½Π°ΠΏΠΈΡΠΈΡΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π΄ΡΡΠ³ Π΄ΡΡΠ³Ρ Π² Π½ΡΠΆΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅.
ΠΡΠΈΠΎΡΠΈΡΠ΅Ρ
ΠΡΠΈΠΎΡΠΈΡΠ΅Ρ (priority) ΠΏΠΎΡΠΎΠΊΠ° ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π²Π°ΠΆΠ½ΠΎΡΡΠΈ ΠΏΠΎΡΠΎΠΊΠ°. Π₯ΠΎΡΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° ΠΊ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΌΡ Π½Π°Π±ΠΎΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΈ Π½Π΅ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½, Π΅ΡΠ»ΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΡ Π·Π°ΠΏΡΡΠΊΠ°, ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊ ΡΠ½Π°ΡΠ°Π»Π° Π·Π°ΠΏΡΡΡΠΈΡ ΠΏΠΎΡΠΎΠΊ Ρ Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠΌ. ΠΠΏΡΠΎΡΠ΅ΠΌ, ΡΡΠΎ Π½Π΅ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΠΏΠΎΡΠΎΠΊΠΈ Ρ ΠΌΠ»Π°Π΄ΡΠΈΠΌΠΈ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ°ΠΌΠΈ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π²ΠΎΠ²ΡΠ΅ (ΡΠΎ Π΅ΡΡΡ ΡΡΠΏΠΈΠΊΠΎΠ²ΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ ΠΈΠ·-Π·Π° ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠ² Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ). ΠΠΎΡΠΎΠΊΠΈ Ρ Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΈΠΌΠΈ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ°ΠΌΠΈ ΠΏΡΠΎΡΡΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΡΡΡΡ ΡΠ΅ΠΆΠ΅.
Π ΠΏΠΎΠ΄Π°Π²Π»ΡΡΡΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² Π²ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠΌ. ΠΡΠ±ΡΠ΅ ΠΏΠΎΠΏΡΡΠΊΠΈ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΠΉ Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ°ΠΌΠΈ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠ²Π»ΡΡΡΡΡ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ.
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠ². ΠΡΠΈΠΎΡΠΈΡΠ΅Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° ΡΠΈΡΠ°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ getPriority() ΠΈ Π·Π°Π΄Π°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ setPriority():
//β’ concurrency/Si mplePri ori ti es.java
// ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠ² ΠΏΠΎΡΠΎΠΊΠΎΠ².
import java.util.concurrent.*.
public class SimplePriorities implements Runnable { private int countDown = 5;
private volatile double d; // ΠΠ΅Π· ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ &
private int priority; public SimplePriorities(int priority) { this.priority = priority;
}
public String toStringO {
return Thread.currentThreadΠ + "; " + countDown;
}
public void runΠ {
Thread.currentThreadO.setPriority(priority); while(true) {
// ΠΡΡΠΎΠΊΠΎΠ·Π°ΡΡΠ°ΡΠ½Π°Ρ, ΠΏΡΠ΅ΡΡΠ²Π°Π΅ΠΌΠ°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ; for(int 1=1: i < 100000; i++) {
d += (Math.PI + Math.E) / (double)i; ifCi % 1000 == 0)
Thread.yieldO;
}
System.out.printin(this); if(--countDown == 0) return;
}
}
public static void main(String[] args) {
ExecutorService exec = Executors.newCachedThreadPoolΠ; for(int i = 0; i < 5; i++) exec.execute(
new SimplePriorities(Thread.MIN_PRIORITY));
exec.execute(
new SimplePriorities(Thread.MAX_PRIORITY)); exec.shutdownO;
}
} /* Output:
Thread[pool-l-thread-6.10.main]: 5 ThreadEpool-l-thread-6.10.main]: 4 ThreadEpool-l-thread-6.10.main]: 3 ThreadEpool-l-thread-6.10.main]: 2 ThreadEpool-l-thread-6.10.main]: 1 ThreadEpool-l-thread-3.1.main]: 5 ThreadEpool-l-thread-2.1.main]: 5 ThreadEpool-1-thread-l.1.main]: 5 ThreadEpool-l-thread-5.1.main]: 5 ThreadEpool-l-thread-4.1.main]: 5
*///:-
Π ΡΡΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΌΠ΅ΡΠΎΠ΄ toStringO ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄ Thread. toString(), ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΠΈΠΌΡ ΠΏΠΎΡΠΎΠΊΠ° (Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅, Π½ΠΎ Π·Π΄Π΅ΡΡ ΠΈΠΌΠ΅Π½Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΡΡΡΡ Π² Π²ΠΈΠ΄Π΅ pool-1-thread-l, pool-l-thread-2 ΠΈ Ρ. Π΄.), ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ ΠΈ Π³ΡΡΠΏΠΏΡ, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ ΠΏΠΎΡΠΎΠΊ. ΠΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½Π°Ρ Π²Π΅ΡΡΠΈΡ toString() ΡΠ°ΠΊΠΆΠ΅ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΉ ΠΎΡΡΡΠ΅Ρ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ Π·Π°Π΄Π°ΡΠ΅ΠΉ. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ Thread, ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠΉ Π·Π°Π΄Π°ΡΠ΅ΠΉ, Π²Π½ΡΡΡΠΈ ΡΠ°ΠΌΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ, ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ Thread.currentThreadO.
ΠΡ Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° ΠΈΠΌΠ΅Π΅Ρ Π½Π°ΠΈΠ²ΡΡΡΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ, Π° Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π½Π° Π½ΠΈΠ·ΡΠ΅ΠΌ ΡΡΠΎΠ²Π½Π΅. Π£ΡΡΠΈΡΠ΅, ΡΡΠΎ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ Π·Π°Π΄Π°Π΅ΡΡΡ Π² Π½Π°ΡΠ°Π»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ run(); Π·Π°Π΄Π°Π²Π°ΡΡ Π΅Π³ΠΎ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ Π±Π΅ΡΡΠΌΡΡΠ»Π΅Π½Π½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Executor Π² ΡΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ Π΅ΡΠ΅ Π½Π΅ Π½Π°ΡΠ°Π» Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π·Π°Π΄Π°ΡΡ.
Π ΠΌΠ΅ΡΠΎΠ΄ run() Π±ΡΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ 100 ΠΠΠ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π·Π°ΡΡΠ°ΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΡΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ ΡΠΈΡΠ»ΠΎΠΌ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ double. ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ d Π±ΡΠ»Π° ΠΎΡΠΌΠ΅ΡΠ΅Π½Π° ΠΊΠ°ΠΊ volatile, ΡΡΠΎΠ±Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ» ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ. ΠΠ΅Π· ΡΡΠΈΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ Π²Ρ Π½Π΅ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ ΡΡΡΠ΅ΠΊΡΠ° ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠ² (ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΠΊΠ» for Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡΠΌΠΈ). Π ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊ ΡΠ΄Π΅Π»ΡΠ΅Ρ Π±ΠΎΠ»ΡΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΡ Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠΌ MAX_PRI0RITY (ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, ΡΠ°ΠΊΠΎΠ²ΠΎ Π±ΡΠ»ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΠΌΠ°ΡΠΈΠ½Π΅ ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Windows Π₯Π ). ΠΠ΅ΡΠΌΠΎΡΡΡ Π΄Π°ΠΆΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ Π²ΡΠ²ΠΎΠ΄ Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»Ρ ΡΠ°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Β«Π΄ΠΎΡΠΎΠ³ΠΎΡΡΠΎΡΡΠ΅ΠΉΒ» ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ, Ρ Π½ΠΈΠΌ Π²Ρ Π½Π΅ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ Π²Π»ΠΈΡΠ½ΠΈΠ΅ ΡΡΠΎΠ²Π½Π΅ΠΉ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠ², ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²ΡΠ²ΠΎΠ΄ Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»Ρ Π½Π΅ ΠΏΡΠ΅ΡΡΠ²Π°Π΅ΡΡΡ (ΠΈΠ½Π°ΡΠ΅ ΡΠΊΡΠ°Π½ Π±ΡΠ» Π±Ρ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ Π½Π΅ΡΡΡΠ°Π·ΠΈΡΠ΅ΠΉ), Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ Π²ΡΡΠ΅, ΠΏΡΠ΅ΡΡΠ²Π°ΡΡ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎ. ΠΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄ΠΎΠ»Π³ΠΎ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π²ΠΌΠ΅ΡΠΈΠ²Π°Π΅ΡΡΡ Π² ΠΏΡΠΎΡΠ΅ΡΡ ΠΈ ΡΠ΅ΡΠ΅Π΄ΡΠ΅Ρ ΠΏΠΎΡΠΎΠΊΠΈ, ΠΏΡΠΎΡΠ²Π»ΡΡ ΠΏΡΠΈ ΡΡΠΎΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΡΠΌ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ yield().
Π ΠΏΠ°ΠΊΠ΅ΡΠ΅ JDK ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ΠΎ 10 ΡΡΠΎΠ²Π½Π΅ΠΉ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠ², ΠΎΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎ Π½Π΅ ΡΠ»ΠΈΡΠΊΠΎΠΌ Ρ ΠΎΡΠΎΡΠΎ ΡΠΎΠ³Π»Π°ΡΡΠ΅ΡΡΡ Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌ. Π ΠΏΡΠΈΠΌΠ΅ΡΡ, Π² Windows ΠΈΠΌΠ΅Π΅ΡΡΡ 7 ΠΊΠ»Π°ΡΡΠΎΠ² ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠ², ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΈΡ ΡΠΎΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ (Ρ ΠΎΡΡ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ Sun Solaris ΠΈΠΌΠ΅Π΅ΡΡΡ 231 ΡΡΠΎΠ²Π½Π΅ΠΉ). ΠΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠΎΠ»Ρ ^ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ ΠΠΠ₯_Π RIORITY, NORM.PRIORITY ΠΈ MIN_PRI0RITY.
ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ
ΠΡΠ»ΠΈ Π²Ρ Π·Π½Π°Π΅ΡΠ΅, ΡΡΠΎ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ run() ΡΠ΄Π΅Π»Π°Π½ΠΎ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠ΅, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ΄ΡΠΊΠ°Π·Π°ΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠΌ ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ. ΠΡΠ° ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ° (Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΡ; Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π³Π°ΡΠ°Π½ΡΠΈΠΈ, ΡΡΠΎ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊ ΠΏΠΎΡΠΎΠΊΠΎΠ² Β«ΠΏΡΠΈΡΠ»ΡΡΠ°Π΅ΡΡΡΒ» ΠΊ Π½Π΅ΠΉ) Π²ΠΎΠΏΠ»ΠΎΡΠ°Π΅ΡΡΡ Π² ΡΠΎΡΠΌΠ΅ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄Π° yield(). ΠΡΠ·ΡΠ²Π°Ρ yield(), Π²Ρ ΡΠΎΠΎΠ±ΡΠ°Π΅ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ΅, ΡΡΠΎ Π² Π½Π΅ΠΉ ΠΌΠΎΠ³ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ°.
Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ LiftOff ΠΌΠ΅ΡΠΎΠ΄ yield() ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΠΎΠ΅ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅ΡΡΡΡΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρ Π·Π°Π΄Π°ΡΠ°ΠΌΠΈ LiftOff. ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ·ΠΎΠ² Thread.yield() Π² Lift0ff.run() ΠΈ ΠΏΡΠΎΡΠ»Π΅Π΄ΠΈΡΠ΅ Π·Π° ΡΠ°Π·Π»ΠΈΡΠΈΡΠΌΠΈ. Π Π²ΡΠ΅ ΠΆΠ΅, Π² ΠΎΠ±ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅ ΡΡΠΎΠΈΡ ΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π½Π° yield() ΠΊΠ°ΠΊ Π½Π° ΡΠ΅ΡΡΠ΅Π·Π½ΠΎΠ΅ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠΎΡΠΎΠΊΠΈ-Π΄Π΅ΠΌΠΎΠ½Ρ
ΠΠ΅ΠΌΠΎΠ½ΠΎΠΌ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎΡΠΎΠΊ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅ΡΠ²ΠΈΡ, ΡΠ°Π±ΠΎΡΠ°Ρ Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π½ΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΅Π΅ Π½Π΅ΠΎΡΡΠ΅ΠΌΠ»Π΅ΠΌΠΎΠΉ ΡΠ°ΡΡΡΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° Π²ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ Π½Π΅-Π΄Π΅ΠΌΠΎΠ½Ρ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡ ΡΠ²ΠΎΡ Π΄Π΅ΡΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ. Π Π½Π°ΠΎΠ±ΠΎΡΠΎΡ, Π΅ΡΠ»ΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ Π½Π΅-Π΄Π΅ΠΌΠΎΠ½Ρ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΡΠΎΠΊ Π½Π΅-Π΄Π΅ΠΌΠΎΠ½, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ main().
//: concurrency/SimpleDaemons.java
// ΠΠΎΡΠΎΠΊΠΈ-Π΄Π΅ΠΌΠΎΠ½Ρ Π½Π΅ ΠΏΡΠ΅ΠΏΡΡΡΡΠ²ΡΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
import java.util.concurrent.*.
import static net mindview.util.Print.*;
public class SimpleDaemons implements Runnable { public void run() { try {
while(true) {
TimeUni t.MILLISECONDS.sieep(100). print(Thread.currentThread() + " H + this);
}
} catch(InterruptedException e) {
printC'sleepO interrupted").
}
}
public static void main(String[] args) throws Exception { for(int i = 0. i < 10; i++) {
Thread daemon = new Thread(new SimpleDaemonsO).
daemon setDaemon(true); // ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠ·Π²Π°ΡΡ ΠΏΠ΅ΡΠ΅Π΄ startO
daemon. startO;
}
printCBce Π΄Π΅ΠΌΠΎΠ½Ρ Π·Π°ΠΏΡΡΠ΅Π½Ρ"). TimeUnit.MILLISECONDS sleep(175);
}
} /* Output: ΠΡΠ΅ Π΄Π΅ΠΌΠΎΠ½Ρ Π·Π°ΠΏΡΡΠ΅Π½Ρ
Thread[Thread-0.5.main] [email protected] Thread[Thread-1.5.main] [email protected] Thread[Thread-2.5.main] [email protected] Thread[Thread-3,5,main] [email protected] Thread[Thread-4.5.main] [email protected] Thread[Thread-5.5.main] [email protected] Thread[Thread-6.5.main] [email protected] Thread[Thread-7.5.main] [email protected] Thread[Thread-8.5.main] [email protected] Thread[Thread-9.5.main] [email protected]
*///:-
Π§ΡΠΎΠ±Ρ Π½Π°Π·Π½Π°ΡΠΈΡΡ ΠΏΠΎΡΠΎΠΊ Π΄Π΅ΠΌΠΎΠ½ΠΎΠΌ, ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄ Π΅Π³ΠΎ Π·Π°ΠΏΡΡΠΊΠΎΠΌ Π²ΡΠ·Π²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ setDaemon().
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ main() Π·Π°Π²Π΅ΡΡΠΈΡ ΡΠ²ΠΎΡ ΡΠ°Π±ΠΎΡΡ, Π½ΠΈΡΡΠΎ Π½Π΅ ΠΏΡΠ΅ΠΏΡΡΡΡΠ²ΡΠ΅Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ, ΠΊΡΠΎΠΌΠ΅ Π΄Π΅ΠΌΠΎΠ½ΠΎΠ². Π§ΡΠΎΠ±Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π·Π°ΠΏΡΡΠΊΠ° Π²ΡΠ΅Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ²-Π΄Π΅ΠΌΠΎΠ½ΠΎΠ² Π±ΡΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Π½Π°Π³Π»ΡΠ΄Π½ΡΠΌΠΈ, ΠΏΠΎΡΠΎΠΊ main() Π½Π° Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΏΠΎΠ³ΡΡΠΆΠ°Π΅ΡΡΡ Π² Β«ΡΠΎΠ½Β». ΠΠ΅Π· ΡΡΠΎΠ³ΠΎ Π²Ρ ΡΠ²ΠΈΠ΄Π΅Π»ΠΈ Π±Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π΄Π΅ΠΌΠΎΠ½ΠΎΠ². (ΠΠΎΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΡΠΉΡΠ΅ Ρ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ sleep() Π΄Π»Ρ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΠΎΠ² ΡΠ°Π·Π½ΠΎΠΉ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ.)
Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ SimpleDaemons.java ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ²Π½ΠΎΠ΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Thread Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΈΡ Β«Π΄Π΅ΠΌΠΎΠ½ΡΠΊΠΎΠ³ΠΎΒ» ΡΠ»Π°Π³Π°. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΡΡΡΠΎΠΈΡΡ Π°ΡΡΠΈΠ±ΡΡΡ (Π΄Π΅ΠΌΠΎΠ½, ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ, ΠΈΠΌΡ) ΠΏΠΎΡΠΎΠΊΠΎΠ², ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π΅ΠΌ; Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ThreadFactory:
//: net/mi ndvi ew/uti1/DaemonThreadFactory.java package net.mindview.util;
import java util.concurrent.*;
public class DaemonThreadFactory implements ThreadFactory { public Thread newThread(Runnable r) { Thread t = new Thread(r), t.setDaemon(true); return t,
}
} /// -
ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΎΠ±ΡΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ThreadFactory Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π°ΡΡΠΈΠ±ΡΡ Π΄Π΅ΠΌΠΎΠ½Π° Π·Π°Π΄Π°Π΅ΡΡΡ ΡΠ°Π²Π½ΡΠΌ true. Π’Π΅ΠΏΠ΅ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ DaemonThreadFactory ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π² Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ΅ Executors.newCachedThread-Pool():