|
| 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