когда я должен использовать синхронизированный блок в моем коде ниже - PullRequest
0 голосов
/ 13 мая 2019

У меня есть определенное количество политик для каждого контакта в списке контактов.Если политикам более 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());
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...