Главная страница
Навигация по странице:

  • Кафедра Автоматизированных систем управления Контрольная работа На тему: «

  • Москва 2019 Постановка задачи

  • Классы программы Исходные данные

  • Вычисление максимального значения

  • Тестирование программы

  • Результат работы программы

  • ОСИС Мади Мезенцев. Потоки Java. Вычисление минимума и максимума


    Скачать 79.5 Kb.
    НазваниеПотоки Java. Вычисление минимума и максимума
    АнкорОСИС Мади Мезенцев
    Дата16.01.2020
    Размер79.5 Kb.
    Формат файлаdoc
    Имя файлаKontrolnaya_Java_1.doc
    ТипКонтрольная работа
    #104322








    «Московский Автомобильно - Дорожный

    Государственный Технический Университет (МАДИ)»

    Кафедра Автоматизированных систем управления

    Контрольная работа

    На тему: «Потоки Java. Вычисление минимума и максимума»


    Студент Коломиец М.В.

    Преподаватель Мезенцев К.Н.


    Москва 2019

    Постановка задачи

    Дана последовательность чисел:

    1000,5,450,8,4,89,12,10,45,23,12,9,21,1,7

    требуется разработать программу с двумя потоками. Потоки работают параллельно, задержка в работе потоков равна одной секунде. Первый поток вычисляет минимум последовательности, второй максимум. По завершении работы потоков вычисляется значение R = max – min. В процессе работы потоков выводится номер итерации обработки последовательности чисел. Для создания потоков использовать интерфейс Runnable. Структура программы показана на рисунке 1.



    Рис.1. Классы программы

    Классы программы

    Исходные данные

    public class ClassData

    {

    double myData[]={-10,5,45,8,-4,8,-10,8,-10,12};

    }

    Вычисление минимального значения

    class ThreadMin implements Runnable{

    String name;

    Thread t;

    double min = 0;

    int idx = 0;

    ClassData objData;
    public ThreadMin(String threadname,ClassData obj){

    name=threadname;

    t = new Thread(this, name);

    System.out.println("Новая нить: " + t);

    objData = obj;

    t.start();

    }

    public void run() {

    try{

    idx = 0;

    min = objData.myData[idx];

    for(int i=1;i
    {

    if(objData.myData[i]
    idx = i;

    min = objData.myData[i];

    }

    System.out.println(t + " : " + i);

    Thread.sleep(1000);

    }

    }catch(InterruptedException e){

    System.out.println(name + " нить прервана");

    }

    System.out.println(name + " нить завершилась !");

    }

    }
    Вычисление максимального значения

    public class ThreadMax implements Runnable {

    String name;

    Thread t;

    double max=0;

    int idx = 0;

    ClassData objData;

    public ThreadMax(String threadname,ClassData obj){

    name=threadname;

    t = new Thread(this, name);

    System.out.println("Новая нить: " + t);

    objData = obj;

    t.start();

    }

    public void run() {

    try{

    idx = 0;

    max = objData.myData[idx];

    for(int i=1;i
    {

    if(objData.myData[i]>max){

    idx = i;

    max = objData.myData[i];

    }

    System.out.println(t + " : " + i);

    Thread.sleep(1000);

    }

    }catch(InterruptedException e){

    System.out.println(name + " нить прервана");

    }

    System.out.println(name + " нить завершилась !");

    }

    }
    Тестирование программы
    public class Driver{

    public static void main(String args[]){

    ThreadMax obMax = new ThreadMax ("Max");

    System.out.println("Состояние первой нити: "+

    obMax.t.isAlive());

    try{

    System.out.println("Ожидание завершения работы нитей");

    obMax.t.join();

    }catch (InterruptedException e){

    System.out.println("Главный поток прерван!");

    }

    ThreadMin obMin = new ThreadMin("Min");

    System.out.println("Состояние второй нити: "+

    obMin.t.isAlive());

    t.strat();

    try{

    System.out.println("Ожидание завершения работы нитей");

    obMin.t.join();

    }catch (InterruptedException e){

    System.out.println("Главный поток прерван!");

    }

    if(obMax.t.isAlive() && obMin.t.isAlive()){

    System.out.println("idx= "+idx+1+ " max= "+ max);

    System.out.println("idx= "+idx+1+ " min= "+ min);

    System.out.println("R(max-min)= "+(max-min));

    }

    }

    }

    Результат работы программы

    Новая нить: Thread[Max,5,main]

    Thread[Max,5,main] : 1

    Новая нить: Thread[Min,5,main]

    Состояние первой нити: true

    Состояние второй нити: true

    Ожидание завершения работы нитей

    Thread[Min,5,main] : 1

    Thread[Min,5,main] : 2

    Thread[Max,5,main] : 2

    Thread[Min,5,main] : 3

    Thread[Max,5,main] : 3

    Thread[Max,5,main] : 4

    Thread[Min,5,main] : 4

    Thread[Max,5,main] : 5

    Thread[Min,5,main] : 5

    Thread[Min,5,main] : 6

    Thread[Max,5,main] : 6

    Thread[Min,5,main] : 7

    Thread[Max,5,main] : 7

    Thread[Min,5,main] : 8

    Thread[Max,5,main] : 8

    Thread[Max,5,main] : 9

    Thread[Min,5,main] : 9

    Thread[Min,5,main] : 10

    Thread[Max,5,main] : 10

    Thread[Min,5,main] : 11

    Thread[Max,5,main] : 11

    Thread[Max,5,main] : 12

    Thread[Min,5,main] : 12

    Thread[Max,5,main] : 13

    Thread[Min,5,main] : 13

    Thread[Max,5,main] : 14

    Thread[Min,5,main] : 14

    Min нить завершилась !

    Max нить завершилась!

    idx=1 max=1000.0

    idx=14 min=1.0

    R(max-min)=999.0




    написать администратору сайта