Не проходит валидацию: Фабрика AmigoThreadFactory должна создавать имена для трэдов по шаблону "GN-pool-A-thread-B".
package com.javarush.task.task28.task2802;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.atomic.AtomicInteger;
/*
Пишем свою ThreadFactory
*/
public class Solution {
public static void main(String[] args) {
class EmulateThreadFactoryTask implements Runnable {
@Override
public void run() {
emulateThreadFactory();
}
}
ThreadGroup group = new ThreadGroup("firstGroup");
Thread thread = new Thread(group, new EmulateThreadFactoryTask());
ThreadGroup group2 = new ThreadGroup("secondGroup");
Thread thread2 = new Thread(group2, new EmulateThreadFactoryTask());
thread.start();
thread2.start();
}
private static void emulateThreadFactory() {
AmigoThreadFactory factory = new AmigoThreadFactory();
Runnable r = new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
}
};
factory.newThread(r).start();
factory.newThread(r).start();
factory.newThread(r).start();
}
public static class AmigoThreadFactory implements ThreadFactory{
static final AtomicInteger poolNumber = new AtomicInteger(1); //номер фабрики
final AtomicInteger threadNumber = new AtomicInteger(1); //номер трэда
@Override
public Thread newThread(Runnable r) {
final ThreadGroup group;
final String namePrefix;
SecurityManager s = System.getSecurityManager();
group = (s != null)? s.getThreadGroup() :
Thread.currentThread().getThreadGroup();
int GNint = poolNumber.getAndIncrement();
String GN;
switch(GNint){
case 1:
GN = "firstGroup";
break;
case 2:
GN = "secondGroup";
break;
case 3:
GN = "thirdGroup";
break;
case 4:
GN = "fourthGroup";
break;
case 5:
GN = "fifthGroup";
break;
case 6:
GN = "sixthGroup";
break;
case 7:
GN = "seventhGroup";
break;
case 8:
GN = "eighthGroup";
break;
case 9:
GN = "ninthGroup";
break;
case 10:
GN = "tenthGroup";
break;
default:
GN = "overThanTenthGroup";
break;
}
namePrefix = GN + "-" + "pool-" + GNint + "-thread-";
Thread t = new Thread(group, r, namePrefix + threadNumber.getAndIncrement(), 0);
if (t.isDaemon())
t.setDaemon(false);
if (t.getPriority() != Thread.NORM_PRIORITY)
t.setPriority(Thread.NORM_PRIORITY);
return t;
}
}
}