Додаток 1
import javax. swing. *;// підключення бібліотеки висновку вікна//на екран
public class Vine {
static int x=0, y=0, z=1;// ініціалізація загальних аргументів//функції
//********************************** підрахунок c використанням многопоточностіstatic class ThreadTest implements Runnable {before1=0; long after1=0;// змінні підрахунку часу
public void run () {
double calc;// змінна підрахунку значень функ//ції
before1=System.currentTimeMillis ();// установка значень змінної вре//мени «до»
for (int i=0; i lt; 5000; i ++) {
//підрахунок значень функції=(Math.sin (i * y) * Math.cos (z * 2)) + (Math.cos (i * y) * Math.sin (2 * z));
//умова виводу на екран промежу//точного значення
if (i% 1 000 == 0) {// умова виведення переможе. знач
after1=System.currentTimeMillis ();// установка значень змінної вре//мени «після»
//вивід на екран проміжного//значення
System.out.format (% s count% d fixing% .4f time% d ms n , getName (), (i/1000), calc, (after1-before1) );
}
}
}
} static String getName () {Thread.currentThread (). getName ();// повернення імені потоку
}
//********************************* підрахунок без використання многопоточностіstatic void free ( ) {
long before2=0; long after2=0;// змінні підрахунку часу
before2=System.currentTimeMillis ();// установка значень змінної вре//мени «до»
double calc;// змінна підрахунку значень функ//ції
for (int i=0; i lt; 5000; i ++) {
//підрахунок значень функції=(Math.sin (i * y) * Math.cos (z * 2)) + (Math.cos (i * y) * Math.sin (2 * z)); (i% 1000 == 0) {// умова виведення переможе. знач
after2=System.currentTimeMillis ();// установка значень змінної вре//мени «після»
//вивід на екран проміжного//значення
System.out.format ( count% d fixing:% .4f time% d ms n , (i/1000), calc, (after2-before2));
}
}
}
static void main (String [] args) {// функція main ()
//висновок запиту на екран
String input_x=JOptionPane.showInputDialog ( Введіть кількість потоків: );
x=Integer.parseInt (input_x);// зчитування значення в перемінну
//висновок запиту на екран
String input_y=JOptionPane.showInputDialog ( Введи?? е аргумент A: );
y=Integer.parseInt (input_y);// зчитування значення в перемінну
//висновок запиту на екранinput_z=JOptionPane.showInputDialog ( Введіть аргумент B: );
z=Integer.parseInt (input_z);// зчитування значення в перемінну
//вивід на консоль текста.out.format ( lt; Виконання програми без використання багатопоточності gt; n ); ();// виклик процедури підрахунку значення//функції без багатопоточності
//вивід на консоль текста.out.format ( lt; Виконання програми c використанням багатопоточності gt; n );
//Підготовка потоковt [] ??= new Thread [x]; (int i=0; i lt; t.length; i ++) {[i]=new Thread (new ThreadTest (), Thread + i);
}
//Запуск потоків (int i=0; i lt; t.length; i ++) {[i] .start () ;. out.format (% s lt; starter gt; n raquo ;, t [i] .getName ());
}. exit (0);// завершення роботи програми
}
}
Проаналізуємо результат виконання програми. Результат виконання програми наведено нижче.
Додаток 2
Результат 1.
При роботі 5 потоків.
lt; Виконання програми без використання багатопоточності gt;
count 0 fixing: 0,9093 time 0 ms1 fixing: 0,9974 time 16 ms2 fixing: 0,5394 time 16 ms3 fixing: - 0,9384 time 16 ms 4 fixing: 0,5476 time 31 ms
lt; Виконання програми c використанням багатопоточності gt;
Thread 0 lt; starter gt; 1 lt; starter gt; 2 lt; starter gt; 2 count 0 fixing 0,9093 time 0 ms2 count 1 fixing 0,9974 time 47 ms2 count 2 fix...