У меня есть определенное количество политик для каждого контакта в списке контактов.Если политикам более 50, то мне нужно использовать новый поток для назначения другому контакту. Я создал внутренний массив для хранения классов, который расширяет класс потоков, и написал метод для назначения политик другому контакту, но перед отправкойсписок политик для нового потока Я извлекаю политики в массив и отправляю их.
Чего я хочу добиться, так это когда пользователь назначает политики, превышающие 50, он должен иметь возможность перемещаться по другой странице для других задач.Мой вопрос:
Правильно ли достигнуть многопоточности таким образом, потому что, когда пользователь снова назначает из того же контакта, он будет получать меньше политик, выполняющих ту же работу с другим потоком?2. что если он попытается создать больше потоков одновременно, и, наконец, как я могу улучшить это?
я создал внутренний массив хранения объекта класса, который расширяет класс потоков, и написал методназначить политики другому контакту, но перед отправкой списка политик в новый поток я извлекаю политики в массив и отправляю их.
//getting policies from database
List < Map < String, String >> policies = new ArrayList < > (); try { //getting list of policies
policies = JsonStrToMap(GetContactPoliciesClient.getContactPolicies(custNum, fromContactSeq)); policiesCount = policies.size();
//policies greater than 50 assigning new thread
if (!policies.isEmpty() && policiesCount >= 50) {
new assignPoliciesNewThread(policies, nameWithSeq).start();
//inner class for new thread
class assignPoliciesNewThread extends Thread {
private final List < Map < String, String >> policies;
private final String toSequence;
public assignPoliciesNewThread(List < Map < String, String >> policies, String toSequence) {
this.policies = policies;
this.toSequence = toSequence;
}
public void run() {
Policy policy = new Policy();
try {
for (Map pol: policies) {
HashMap < String, Object > map = new HashMap < > ();
policy.setLevel1Org(100);
policy.setOutsideProd_contactSeq(toSequence);
policy.setCustNum(pol.get(APIGEE_MODIFY_POLICY_APPLICATION_CUSTNUM).toString());
policy.setPolicyNum(pol.get(APIGEE_MODIFY_POLICY_APPLICATION_POLICYNUM).toString());
policy.setPolicySeq(Integer.valueOf(pol.get(APIGEE_MODIFY_POLICY_APPLICATION_POLICYSEQ).toString()));
map.put("policy", policy);
try {
policy = (Policy) ApigeeCommonClientUtility.callApigee(map, "modifypolicy", HashMap.class, Policy.class);
} catch (Exception e) {
logger.error(e.toString());
}
}
} catch (Exception e) {
logger.error(e.toString());
}
}
}