Клас Runtime

Обєкти класу Runtime описують стан runtime-системи Java і ті операції, які вона може виконати Для отримання обєкта Runtime, що відповідає поточному runtime-контексту, слід викликати статичний метод RuntimegetRuntime

Одна з операцій, виконуваних поточним runtime-контекстом, – отримання вхідного або вихідного потоку, що перекладає символи локального набору в їх Unicode-еквіваленти Багато існуючі системи працюють з національними алфавітами, що використовують

8-розрядні чи інші набори символів, що конфліктують з Unicode Runtime-контекст надає кошти для перекладу символів потоку, що працює з локальним набором, в еквівалентні їм символи Unicode Наприклад, клавіатура може генерувати 8-розрядний символьний код Oriya Якщо скористатися потоком Systemin, який читає символи з цієї клавіатури і отримує від неї локалізований вхідний потік, символи Oriya будуть переводитися в їх 16-розрядні еквіваленти

Unicode в діапазоні \ u0b00-\ u0b7f Локалізований вихідний потік виконує зворотне

перетворення

Runtime-контекст може бути знищений, для цього слід викликати його метод exit і передати йому код завершення Метод знищує всі потоки в поточному runtime-контексті, незалежно від їх стану При цьому для знищення потоків не використовується виняток ThreadDeath вони просто зупиняються без виконання умов finally Для знищення всіх програмних потоків у вашій групі краще користуватися методом Thread Groupstop, який дозволяє потокам виконати завершальні дії відповідно до умов finally

За традицією, завершальний код exit, рівний нулю, означає успішне завершення завдання, а відмінний від нуля – невдачу Існує два способи передачі інформації з кодом завершення Перший – негайно викликати exit і зупинити всі потоки Другий – переконатися, що всі потоки чисто завершилися, і тільки потім викликати exit Наведений нижче приклад зупиняє всі потоки в поточній групі, дає їм завершитися і потім викликає exit:

public static void safeExit(int status) {

/ / Отримати список всіх потоків

Thread myThrd = ThreadcurrentThread() ThreadGroup thisGroup = myThrdgetThreadGroup() int count = thisGroupactiveCount()

Thread [] thrds = new Thread [count + 20] / / +20 Всяк

/ / Випадок

thisGroupenumerate(thrds)

/ / Зупинити всі потоки

for (int i = 0 i &lt&lt thrdslength i++) {

if (thrds[i] = null &amp&amp thrds[i] = myThrd)

thrds[i]stop()

}

/ / Дочекатися завершення всіх потоків

for (int i = 0 i &lt&lt thrdslength i++) {

if (thrds[i] = null &amp&amp thrds[i] = myThrd) {

try {

thrds[i]join()

} catch (InterruptedException e) {

/ / Пропустити потік

}

}

}

/ / Тепер можна виходити

Systemexit(status)

}

Вправа 144

Модифікуйте метод safeExit так, щоб він обробляв потоки, які могли бути створені після виклику enumerate Крім того, метод повинен пропускати потоки-демони, які будуть знищуватися автоматично

146 Різне

Два методи класу System не належать до однієї з категорій:

public static long currentTimeMillis()

Повертає поточний час за Гринвічем в мілісекундах, рахуючи від початку епохи (00:00:00 UTC 1 січня 1970 року) Час повертається у вигляді значення long, тому переповнення наступить лише в 292280995 році – Для більшості практичних цілей цього цілком вистачає Для більш складних додатків може стати в нагоді клас Date см розділ Клас Date.

public static void arraycopy(Object  src, int srcPos, Object dst, int dstPos, int count)

Копіює вміст вихідного масиву починаючи з елемента src [srcPos] в цільової масив з елемента dst [dstPos] Копіюється рівно count елементів Всі номери елементи повинні лежати в межах масиву, інакше збуджується виключення IndexOutOfBoundsException Типи даних вихідного масиву повинні бути сумісні з типами цільового масиву, інакше збуджується виключення ArrayStoreException Сумісність слід розуміти таким чином: для масивів, що містять

посилання на обєкти, кожен обєкт вихідного масиву повинен присвоюватися відповідному елементу цільового масиву Для масивів зі значеннями вбудованих типів типи повинні збігатися, а не просто бути сумісними по привласненню метод arraycopy не може застосовуватися для копіювання масиву short в масив int

Метод arraycopy правильно працює з перекриваються масивами, тому він може застосовуватися для копіювання однієї частини масиву в іншу Наприклад, ви можете зрушити весь вміст масиву на один елемент до початку, як це було зроблено в методі squeezeOut

Два трасувальних методу класу Runtime, traceInstructions і trace MethodCalls, також не належать ні до однієї категорії Кожному з них передається логічний аргумент якщо він дорівнює true, включається трасування інструкцій або викликів методів відповідно Щоб відключити трасування, слід викликати метод з аргументом рівним false Кожна реалізація може надходити з цими викликами так, як вважатиме за потрібне, в тому числі й ігнорувати їх, якщо нікуди вивести результати трасування Ймовірно, ці методи будуть застосовуватися в першу чергу в середовищах розробки

147 Безпека

Клас System містить два методи для роботи з обєктом класу Security Manager Клас SecurityManager включає в себе методи, які дозволяють або забороняють відкриття сокетів (sockets), доступ до файлів, створення програмних потоків і т д Подробиці про роботу менеджера безпеки приведені в специфікації Java Language Specification.

public static void setSecurityManager(SecurityManager s)

Задає системний обєкт, який є менеджером безпеки Дане значення може бути присвоєно лише один раз, щоб при налаштуванні безпеки системи можна було розраховувати на те, що воно не зміниться

public static SecurityManager getSecurityManager()

Видає системний обєкт менеджера безпеки Опис менеджера безпеки занадто ускладнило б цю книгу за подробицями звертайтеся до онлайнової документації

Джерело: Арнольд К, Гослінг Д – Мова програмування Java (1997)

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*