/
nea
/
androidGroupBuilder
Обзор
Документация
Войти
/
nea
/
androidGroupBuilder
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
app/src/main/java/com/ea/groupbuilder/myExecutor.java
273 строки
12 KB
ea
Группа Автоморфизмов отлажено 23_04_2026
23 апр 2026, 17:08
23 апр 2026, 17:08
4513276
Код
Авторство
О чём код?
package com.ea.groupbuilder; import android.app.Application; import android.os.Build; import android.util.Log; import android.view.View; import java.util.concurrent.*; final public class myExecutor { // класс для выполнения работы в отдельном потоке // https://java-online.ru/concurrent-executor.xhtml private static mAplication mApp = null; private static final String TAG = "GRUGRA_EXECUTOR"; final static private boolean DISPLAYLOG = false; final private static CountDownLatch cdl1 = new CountDownLatch(1); private static ExecutorService executor; private static MyThread myThread; private static DbHelper dbH; myExecutor( mAplication mApl) { mApp = mApl; dbH = mApl.dbH; executor = Executors.newFixedThreadPool(1); myThread = new MyThread(cdl1); new Thread(myThread); } public static void went(int nWork) { // собственно работа в потоке if (DISPLAYLOG) Log.e(TAG, "Запуск потока " + nWork); myThread.nWrk = nWork; myThread.isCancel = false; executor.execute(myThread); if (DISPLAYLOG) Log.e(TAG, "Поток " + nWork + " работает"); } public static void cancel() { myThread.isCancel = true; if (DISPLAYLOG) Log.e(TAG, "cancel() " + " PID= "+ android.os.Process.myPid()); } public static void endWork() { executor.shutdownNow(); try { final boolean done = executor.awaitTermination(1, TimeUnit.MINUTES); if (DISPLAYLOG) Log.e(TAG, " awaitTermination " + done); } catch (Exception eee) { eee.printStackTrace(); } } static class MyThread implements Runnable { // класс потока public int nWrk; // номер работы потока public static boolean isCancel = false; // признак прерывания private final String name; private final CountDownLatch latch; MyThread(CountDownLatch c) { latch = c; name = "Potok"+ nWrk; } private void f_resech(int chto) { classForResearch forResech = new classForResearch(); if (chto == 6) forResech.f_resech(mApp); // сохранить группу в таблицах *_n для исследования } volatile int generatorFlag = 0; // > 0 - запущено построение по генераторам private void f_testResech() { classForResearch forResech = new classForResearch(); forResech.f_testGenerator(mApp); } private void f_main1(int vidWgrup) { // построение группы, работа с classBuild // vidWgrup = 0 - сама группа, 1 - группа автоморфизмов classBuild clBuild= new classBuild(); clBuild.init(mApp, mApp.dbH, vidWgrup); if (vidWgrup == 0) clBuild.f_createGrupp(); else { clBuild.f_build(); } if (isCancel || DbHelper.err.length() > 0) return; clBuild.f_build_switch(); if (isCancel || DbHelper.err.length() > 0) return; clBuild.f_build_centr(); if (isCancel || DbHelper.err.length() > 0) return; clBuild.f_createCykles(); if (isCancel || DbHelper.err.length() > 0) return; clBuild.f_build_conjugate(); } private void f_main2(int vidWgrup) { // построение группы, работа с classSylow // vidWgrup = 0 - сама группа, 1 - группа автоморфизмов classSylow clSylow = new classSylow(); clSylow.init(mApp, mApp.dbH, vidWgrup); if (isCancel || DbHelper.err.length() > 0) return; clSylow.f_build_sylov(); if (isCancel || DbHelper.err.length() > 0) return; if (DbHelper.selectedMas.length > 0) return; // НЕ все сил построены! if (vidWgrup == 0) clSylow.f_generateSylEpi(); } public void run() { try { /* if (DISPLAYLOG) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) Log.e(TAG, " Build.VERSION.SDK_INT " + Build.VERSION.SDK_INT + " Build.VERSION_CODES.P = " + Build.VERSION_CODES.P + " name = " + name + " nWrk " + nWrk + " getProcessName = " + Application.getProcessName() + " " + name + " PID= " + android.os.Process.myPid() + " isCancel=" + isCancel); else Log.e(TAG, " Build.VERSION.SDK_INT " + Build.VERSION.SDK_INT + " Build.VERSION_CODES.P = " + Build.VERSION_CODES.P + " name = " + name + " nWrk " + nWrk + " PID= " + android.os.Process.myPid()); } */ Thread.sleep(400l); mApp.activityBuild.runOnUiThread(new Runnable() { public void run() { mApp.activityBuild.invalidateOptionsMenu(); mApp.activityBuild.loadingPB.setVisibility(View.VISIBLE); if (nWrk != 7) mApp.activityBuild.loadingPB.setIndeterminate(true); else mApp.activityBuild.loadingPB.setIndeterminate(false); // Log.e(TAG, " loadingPB = " + nWrk + " max = " + mApp.activityBuild.loadingPB.getMax() + // " getProgress = " + mApp.activityBuild.loadingPB.getProgress() + " isIndeterminate = " + mApp.activityBuild.loadingPB.isIndeterminate()); } }); Thread.sleep(200l); if (nWrk == 7) { // Автоморфизмы Посторить Все classGenDop classDop = new classGenDop(mApp, mApp.dbH); // Log.e(TAG, "Автоморфизмы Посторить Все " + mApp.activityBuild.loadingPB.isActivated() ); mApp.whatRun = 1; mApp.activityBuild.invalidateOptionsMenu(); Thread.sleep(800l); classDop.f_perebor(); // ??? построение всех автоморфизмов if (! isCancel && DbHelper.err.length() == 0) { classDop.f_prepareGruppDp(); mApp.activityBuild.loadingPB.setIndeterminate(true); Thread.sleep(200l); if (! isCancel && DbHelper.err.length() == 0) { f_main1(1); if (! isCancel && DbHelper.err.length() == 0) { f_main2(1); if (! isCancel && DbHelper.err.length() == 0) classDop.f_postGruppDp(); } } } Thread.sleep(400l); } else if (nWrk == 8) { // Автоморфизмы образы классов сопр эл-тов, образы cykl_len, сил подгрупп classGenDop classDop = new classGenDop(mApp, mApp.dbH); // Log.e(TAG, "Автоморфизмы образы " + mApp.activityBuild.loadingPB.isActivated()); mApp.whatRun = 1; mApp.activityBuild.invalidateOptionsMenu(); Thread.sleep(800l); classDop.f_Im_Dop(); if (! isCancel && DbHelper.err.length() == 0) classDop.f_characterDp(); Thread.sleep(400l); } else if (nWrk == 9) { // Образы силов под-пп classGenDop classDop = new classGenDop(mApp, mApp.dbH); // Log.e(TAG, "Автоморфизмы образы " + mApp.activityBuild.loadingPB.isActivated()); mApp.whatRun = 1; mApp.activityBuild.invalidateOptionsMenu(); Thread.sleep(400l); classDop.f_autoSylovDp(); // перемещения силов подгрупп Thread.sleep(400l); } else { switch (nWrk) { // номер работы потока case 0: mApp.whatRun = 1; mApp.activityBuild.invalidateOptionsMenu(); f_main1(0); f_main2(0); if (isCancel) mApp.whatRun = -1; else { mApp.whatRun = 2; if (generatorFlag > 0) // запустить сверку групп f_testResech(); } generatorFlag = 0; break; case 1: // Построение графа Кэли по итерациям case 3: // Построение графа Кэли по силовским подгруппам mApp.activityBuild.f_build_graph(nWrk); // Построение графа break; case 2: mApp.activityBuild.f_look(); // Просмотр результатов break; case 4: mApp.activityBuild.f_addit(); // вложить группу постановками на своем множестве break; case 5: // искать След коммутант mApp.dbH.f_nextKomm(); break; case 6: // сохранить Sn в базе для исследования f_resech(nWrk); // заполняет classSubs.newSubsMas - Построить по генераторам; сохранить Sn в базе для исследования break; } } if (isCancel || DbHelper.err.length() > 0) mApp.whatRun = -1; else mApp.whatRun = 2; if (mApp.activityBuild != null) { mApp.activityBuild.runOnUiThread(new Runnable() { public void run() { mApp.activityBuild.loadingPB.setVisibility(View.INVISIBLE); mApp.activityBuild.invalidateOptionsMenu(); } }); } if (mApp.activityBuild != null) mApp.activityBuild.invalidateOptionsMenu(); // if (DISPLAYLOG) // Log.e(TAG, name + " completed " + nWrk + " isCancel=" + isCancel + " mApp.whatRun="+ mApp.whatRun); latch.countDown(); } catch (Exception e) { Log.e(TAG, "Error run " + e.getMessage() ); mApp.curExeption = e; DbHelper.err += "Error run " + e.getMessage(); mApp.whatRun = -1; } finally { if (isCancel || DbHelper.err.length() > 0) mApp.whatRun = -1; else mApp.whatRun = 2; if (DbHelper.err.length() > 0) { Log.e(TAG, "Error run " + DbHelper.err); mApp.f_messError(0, "myExecuter", true); } if (mApp.activityBuild != null) mApp.activityBuild.invalidateOptionsMenu(); } } } } //-----------------------