Skip to content

Commit c779205

Browse files
authored
He shall glorify me
He shall glorify me: for he shall receive of mine, and shall shew it unto you. (John 16:14)
1 parent a21a7aa commit c779205

1 file changed

Lines changed: 94 additions & 0 deletions

File tree

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
2+
//He shall glorify me: for he shall receive of mine, and shall shew it unto you. (John 16:14)
3+
4+
package com.javarush.task.task28.task2802;
5+
6+
7+
import java.util.concurrent.ThreadFactory;
8+
import java.util.concurrent.atomic.AtomicInteger;
9+
10+
/*
11+
Пишем свою ThreadFactory
12+
*/
13+
public class Solution {
14+
15+
public static void main(String[] args) {
16+
class EmulateThreadFactoryTask implements Runnable {
17+
@Override
18+
public void run() {
19+
emulateThreadFactory();
20+
}
21+
}
22+
23+
ThreadGroup group = new ThreadGroup("firstGroup");
24+
Thread thread = new Thread(group, new EmulateThreadFactoryTask());
25+
26+
ThreadGroup group2 = new ThreadGroup("secondGroup");
27+
Thread thread2 = new Thread(group2, new EmulateThreadFactoryTask());
28+
29+
thread.start();
30+
thread2.start();
31+
}
32+
33+
private static void emulateThreadFactory() {
34+
AmigoThreadFactory factory = new AmigoThreadFactory();
35+
Runnable r = new Runnable() {
36+
@Override
37+
public void run() {
38+
System.out.println(Thread.currentThread().getName());
39+
}
40+
};
41+
factory.newThread(r).start();
42+
factory.newThread(r).start();
43+
factory.newThread(r).start();
44+
}
45+
46+
public static class AmigoThreadFactory implements ThreadFactory{
47+
AtomicInteger integer=new AtomicInteger(0);
48+
AtomicInteger factoryNum=new AtomicInteger(0);
49+
static AtomicInteger factoryCount=new AtomicInteger(0);
50+
public AmigoThreadFactory() {
51+
factoryNum.set(factoryCount.incrementAndGet());
52+
}
53+
@Override
54+
public Thread newThread(Runnable r)
55+
{
56+
Thread thread = new Thread(r);
57+
thread.setDaemon(false);
58+
thread.setPriority(Thread.NORM_PRIORITY);
59+
thread.setName(thread.getThreadGroup().getName()+"-pool-"+factoryNum+"-thread-"+integer.incrementAndGet());
60+
return thread;
61+
}
62+
}
63+
64+
}
65+
66+
/*
67+
Пишем свою ThreadFactory
68+
В классе Solution создай публичный статический класс AmigoThreadFactory, реализующий интерфейс ThreadFactory.
69+
1. Реализация интерфейсного метода - создайте и верните трэд, который должен:
70+
1.1. не быть демоном,
71+
1.2. иметь нормальный приоритет,
72+
1.3. имя трэда должно иметь шаблон "GN-pool-A-thread-B",
73+
где GN - это имя группы,
74+
A - это номер фабрики инкрементируется в пределах класса начиная с 1, используйте AtomicInteger,
75+
B - номер треда инкрементируется в пределах конкретной фабрики начиная с 1, используйте AtomicInteger.
76+
2. Каждая фабрика должна иметь ту группу тредов (ThreadGroup), в которой она была создана.
77+
3. Методы main и emulateThreadFactory не участвуют в тестировании.
78+
79+
Пример вывода:
80+
secondGroup-pool-2-thread-1
81+
firstGroup-pool-1-thread-1
82+
firstGroup-pool-1-thread-3
83+
secondGroup-pool-2-thread-3
84+
firstGroup-pool-1-thread-2
85+
secondGroup-pool-2-thread-2
86+
87+
88+
Требования:
89+
1. В классе Solution нужно создать класс public static AmigoThreadFactory, который реализует интерфейс ThreadFactory.
90+
2. Фабрика AmigoThreadFactory должна создавать трэды, которые не являются демоном.
91+
3. Фабрика AmigoThreadFactory должна создавать трэды, которые имеют нормальный приоритет.
92+
4. Фабрика AmigoThreadFactory должна создавать имена для трэдов по шаблону "GN-pool-A-thread-B".
93+
5. Каждая фабрика должна производить трэды с группой (ThreadGroup), в которой она была создана.
94+
*/

0 commit comments

Comments
 (0)