русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Потоки в JAVA


Дата добавления: 2015-06-12; просмотров: 1205; Нарушение авторских прав


Java є багатопотоковою мовою, що підтверджується типом методів класу Object– базового для усіх класів Java. Шість загальнодоступних методів класу Object призначені для управлінням потоками і міжпотоковим обміном інформацією. Java інкапсулює поняття потоку в класі Thread, який має два типи конструкторів. Вони відповідають двом способам формування об’єкту для виконання у власному потоці.

Простий потік.Найпростішим є потік основної програми. Потік основної програми – це пострічкова послідовність виконання команд. Кожна програма має щонайменше один потік, як наприклад наступна програма

public class Hello {

public static void main(string args[]) {

system.out.println(“HelloWorld ”);

}

}

або декілька потоків.

При стартуванні наведеної програми метод mainз однією стрічкою коду створює потік. Потік досягає кінця методу і пропадає. Програма здійснює вихід. Без використання потоків і наявності багатьох стрічок коду виконується тільки одна стрічка.

Стани потоку.Розглянемо, як програма методом main встановлює інші потоки, запускає їх та передає їм управління.

Створення потоку здійснюється аналогічно до створення об’єкту будь–якого класу Java. Створений потік, але ще не запущений, знаходиться в стані “новий потік”. Після запуску потоку він знаходиться в стані “виконання”. При завершення методу потоку run він переходить в “завершений” стан.

Методипотоків startіrun. Об’єкт класу Thread формується конструктором і завершується поверненням з деструктора. Конструктор Threadі метод start виконуються в потоці, у якому вони викликаються. Метод runвиконується в новому потоці і будь–який інший, викликаний з run, також буде виконуватись в ньому. Метод run є ядром об’єкту класу Thread. Він створює команди тіла потоку. Цей метод призначений для реалізації поведінки потоку. Метод run, як правило, містить цикл, часом нескінченний, наприклад,



public void run () {

while (true) {

}

}

Методи start() і stop() використовуються для створення і знищення базового потоку. Для запуску потоку необхідноі викликати start, але stopне обов’язковий для його знищення. Більшість аплетів розраховані на те, що повернення з методу run зруйнує потік. Потік призупиняється (перевід в режим “очікування”) за допомогою методу suspend(рис.1.4), який зупиняючи виконання потоку залишає його в пам’яті. Метод resume поновлює виконання з того місця, де потік був призупинений. Метод join() є також важливим механізмом управління потоком, який використовується для запуску потоків.

Атрибути потоку.Кожен потік має три атрибути, які можна встановити і визначити: ім’я, пріоритет і демон – статус. Ім’я потоку є простим ідентифікатором, яке використовується для відлагоджування та системного моніторингу. Виконання потоків планується автоматично на основі пріоритетів. Потоки з вищим пріоритетом мають більший доступ до ресурсів комп’ютера, вони плануються для більш частого використання порівняно з потоками з нижчим пріоритетом. Пріоритет змінюється в процесі за допомогою методу Thread.setPriority. Різні операційні системи використовують різні діапазони для значень пріоритетів. В Java встановлення пріоритету потоку базується на трьох константах: MIN_PRIORITY, NORM_PRIORITY, MAX_PRIORITY.

Статус демона визначається методом Thread.setDaemon, який необхідно викликати перед звертанням до методу start (тобто до початку реального виконання базового потоку операційної системи).

 

Невидимі та інші потоки. В програмі Java існують невидимі потоки. Бездіяльний потік, збирач сміття та фіналізатор працюють разом. Бездіяльний потік має дуже низький пріоритет і підтримує прапорець сигналу виконання потоку. Пріоритет бездіяльного потоку вибирається таким, щоб він ніколи не виконувався, за винятком моменту, коли всі інші потоки заблоковані.

Є дваспособи побудови і запуску потоків. Найпростіший полягає у наслідуваннястандартного класу потоку Thread. Нижче наведено приклад програми як сукупності трьох потоків:

public class MyThread ехtends Thread{ //планується виконання у потоці

public void run () { // метод викликається при запуску потоку

while (true) {

}

}

}

public static void main(String args[]) {

Thread MyThread1=new MyThread.start();// створення і старт

Thread MyThread2=new MyThread.start();

Thread MyThread3=new MyThread.start();

}

}

Другий спосіб використовується, якщо програміст створює декілька потоків з доступом до спільного об’єкту. Він полягає у створенні класу з методом run() і наслідуванням інтерфейсу Runnable(для вказання компілятору, що клас буде виконуватись як потік). Запуск потоку можливий з допомогою методу join:

public class Server implements Runnable { // клас у потоці

public static void main(String args[]) {

new Thread(new Server()).start();

try {

Thread.currentThread().join();

} catch (InterruptedException e) {

}

}

}

або без нього

class MyThread implements Runnable {

public void run() {

// основний метод класу

}

}

Runnable runnable = new MyThread(); // створення об’єкту

Thread thread = new Thread(runnable); // створення об’єкту

thread.start(); // стартування потоку і методу runв runnable

Програмування з потоками вимагає від програміста навичок та досвіду. Тоді використання апарату потоків принесе бажаний ефект збільшення продуктивності програмних засобів.



<== предыдущая лекция | следующая лекция ==>
Вказівки до виконання роботи | Лабораторна робота №4


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.938 сек.