МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
Національний університет «Львівська політехніка»
Інститут Післядипломної освіти
/
Звіт про виконання
ЛАБОРАТОРНОЇ РОБОТИ №3
з курсу " Програмне забеспечення мережевих технологій "
Тема. «Побудова програм потоків за допомогою стандартних бібліотек Java.».
Тема: Побудова програм потоків за допомогою стандартних бібліотек Java.
Мета: Освоїти елементи програмування мовою JAVA, , а також засвоїти класи і методи графічної бібліотеки awt (swing).
Теоретичні відомості
Організація потоків в середовищі Java дозволяє домогтися приросту продуктивності практично в усіх програмах. Розробка додатків на основі потоків, тобто особливих послідовностей команд , забезпечує значний приріст продуктивності. Розглянемо , наприклад , програму -програвач DVD , яка зчитує великі обсяги даних з компакт- диска, обробляє їх і виводить зображення на екран. Звичайні однопоточні програми - а це більшість сучасних клієнтських програм - виконують перераховані дії послідовно . У даному прикладі обробка даних розпочнеться лише після того, як з диска буде лічений певний обсяг інформації. Продуктивність такої програми невисока: ресурси, які можуть використовуватися для обробки, що не будуть задіяні, поки йде зчитування наступної порції інформації з диска.
У багатопотокової версії програвача один потік призначався б для зчитування інформації , другий - для обробки, а третій - для запису даних у видеобуфер, причому всі вони виконувалися б паралельно , а обробка тривала б навіть під час читання з диска - приріст продуктивності. Можна навести ще багато прикладів , коли одночасне виконання кількох дій призводить до підвищення продуктивності системи. Саме для збільшення продуктивності і реалізована багатопоточність у віртуальній машині Java ( JVM ).При запуску будь-якої програми утворюється , принаймні , один потік . В С / С + + і Java цей потік запускається при виклику методу main ( ) . Для створення додаткових потоків необхідно їх запустити і призначити їм певні функції , після виконання яких потоки автоматично будуть завершені віртуальною машиною .
У середовищі Java для створення потоку та призначення їм функцій є два способи . Першим з них є успадкування від класу Thread ( входить у пакет java.lang ) з наступним перевизначенням методу run ( ) на функцію , яку ви хочете призначити для потоку . Нижче наведено приклад коду :
public class SimpleThread extends Thread { public SimpleThread(String str) { super(str); } public void run() { for (int i = 0; i < 10; i++) { System.out.println(i + " " + getName()); try { sleep((long)(Math.random() * 1000)); } catch (InterruptedException e) {} } System.out.println("DONE! " + getName()); }}
Таким чином, відбувається спадкування від класу Thread із запуском перевизначеного методу run (). Призначена функція організовує цикл, при якому на екран виводиться рядок, після чого програма зупиняється на випадковий інтервал часу. Після 10 ітерацій циклу на екран виводиться слів "DONE!", А потік завершується, оскільки функція закінчила своє виконання. Нижче наведено приклад функції для створення потоку:
ublic class TwoThreadsDemo { public static void main (String[] args) { new SimpleThread("Do it!").start(); new SimpleThread("Definitely not!").start(); }}
Код простий: запускається функція з ім'ям, яке виводитиметься на екран, а потім викликається метод start (), який, у свою чергу, викличе метод run (). Результат виконання програми нескладно передбачити.
2. Умова завдання
Створити JAVA потоки декількох годиннніків.
3. Виконання роботи
Код JAVA-аплету:
import java.awt.*;
import java.applet.*;
import java.applet.*;
import java.awt.*;
import java.util.*;
public class ClockApplet extends Applet implements Runnable{
Thread t,t1,t2,t3;
public void start(){
t = new Thread(this);
t2 = new Thread(this);
t.start();
t2.start();
}
public void run(){
t1 = Thread.currentThread();
t3= Thread.currentThread();
while((t1 == t)||(t2 == t3)){
repaint();
//repaint();
try{
t1.sleep(500);
//t3.sleep(500);
}
catch(InterruptedException e){}
repaint();
try{
//t1.sleep(500);
t3.sleep(500);
}
catch(InterruptedException e){}
}
}
public void paint(Graphics g){
Calendar cal = new GregorianCalendar();
String hour = String.valueOf(cal.get(Calendar.HOUR));
String minute = String.valueOf(cal.get(Calendar.MINUTE));
String second = String.valueOf(cal.get(Calendar.SECOND));
g.drawString(hour + ":" + minute + ":" + second, 20 , 30);
g.drawString(hour + ":" + minute + ":" + second, 80 ,100);
}
}
Створимопростеньку html-сторінку для відображення та виконання нашого аплету:
<HTML>
<HEAD>
</HEAD>
<BODY BGCOLOR="000000">
<CENTER>
<APPLET code = " ClockApplet.class" width = "500"
height = "300">
</APPLET>
</CENTER>
</BODY>
</HTML>
4. Результат виконання програми
Відкомпілюємо java-код, за допомогою утиліти javac (рис.1) в проміжний код JVM та запустимо та переглянемо результат завершеної роботи, за допомогою утиліти appletviewer (рис.2).
Рис.1. Виконання утиліт javac та appletviewer
/
Рис.2. Викоанання аплету
Висновок.
Виконуючи дану лабораторну роботу я ознайомився з принципами програмування мовою JAVA, використання базовийх можливості багатопоточності, освоїв принципи побудови аплетів, а також засвоїв класи і методи бібліотек java.awt, java.applet.