Създадох програмата, която технически работи на 24 * 7.
Между другото, когато програмата има възможност да се позове на новото Thread
понякога се появява неочаквана ситуация, както нишката не работи, въпреки че инструкцията е обработена.
Опитах се да стартирам нишката си по различен начин:
инстанцира и стартира нишката като локална променлива
void method() { new Thread(new Runnable(){...}).start(); }
същото като 1), но задайте неговия обект, който разпределя по основния процес
Thread t; //member of class own by main process void method() { t = new Thread(new Runnable(){...}); t.start(); }
използвайте изпълнителната услуга като делегиращ орган
ExecutorserviceObject.execute(new Runnable(){...});
Аз по-скоро имам проблеми в 1), когато имам дългогодишен ход от 2) и 3).
Мисля, че проблемът може да бъде свързан със събиране на боклука и / или планиране на нишки.
Как може да се случи това? Може ли някой да разработи какво се случва под прикритието?
Отговори:
0 за отговор № 1Първият случай и вторият случай са доста сходни. Дори ако не зададете Thread
обект на полето / променливата, остава силнодостигане поне до завършване на конеца (нормално или по изключение). Запазването му в поле прави по-лесно контрола на нишката (например свързването му или изпращането на прекъсване), но не е необходимо.
Така от кода, публикуван във въпроса, не трябва да има реална разлика между първия и втория случай. Вероятно проблемът ви е в друг код.