Главная страница

многопоточность джава. многопоточность. Класс Thread в java функциональность отдельного потока заключается в классе Thread


Скачать 340.19 Kb.
НазваниеКласс Thread в java функциональность отдельного потока заключается в классе Thread
Анкормногопоточность джава
Дата17.12.2021
Размер340.19 Kb.
Формат файлаdocx
Имя файламногопоточность.docx
ТипДокументы
#306823
страница3 из 6
1   2   3   4   5   6

Реализация интерфейса Runnable


Другой способ определения потока представляет реализация интерфейса Runnable. Этот интерфейс имеет один метод run:

1

2

3

4

interface Runnable{

     

    void run();

}

В методе run() собственно определяется весь тот код, который выполняется при запуске потока.

После определения объекта Runnable он передается в один из конструкторов класса Thread:

1

Thread(Runnable runnable, String threadName)

Для реализации интерфейса определим следующий класс MyThread:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

class MyThread implements Runnable {

      

     

    public void run(){

          

        System.out.printf("%s started... \n", Thread.currentThread().getName());

        try{

            Thread.sleep(500);

        }

        catch(InterruptedException e){

            System.out.println("Thread has been interrupted");

        }

        System.out.printf("%s finished... \n", Thread.currentThread().getName());

    }

}

  

public class Program {

  

    public static void main(String[] args) {

          

        System.out.println("Main thread started...");

        Thread myThread = new Thread(new MyThread(),"MyThread");

        myThread.start();

        System.out.println("Main thread finished...");

    }

}

Реализация интерфейса Runnable во многом аналогична переопределению класса Thread. Также в методе run определяется простейший код, который усыпляет поток на 500 миллисекунд.

В методе main вызывается конструктор Thread, в который передается объект MyThread. И чтобы запустить поток, вызывается метод start(). В итоге консоль выведет что-то наподобие следующего:

Main thread started...

Main thread finished...

MyThread started...

MyThread finished...

Поскольку Runnable фактически представляет функциональный интерфейс, который определяет один метод, то объект этого интерфейса мы можем представить в виде лямбда-выражения:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

public class Program {

  

    public static void main(String[] args) {

          

        System.out.println("Main thread started...");

        Runnable r = ()->{

            System.out.printf("%s started... \n", Thread.currentThread().getName());

            try{

                Thread.sleep(500);

            }

            catch(InterruptedException e){

                System.out.println("Thread has been interrupted");

            }

            System.out.printf("%s finished... \n", Thread.currentThread().getName());

        };

        Thread myThread = new Thread(r,"MyThread");

        myThread.start();

        System.out.println("Main thread finished...");

    }

}

Примеры потоков ранее представляли поток как последовательный набор операций. После выполнения последней операции завершался и поток. Однако нередко имеет место и другая организация потока в виде бесконечного цикла. Например, поток сервера в бесконечном цикле прослушивает определенный порт на предмет получения данных. И в этом случае мы также можем предусмотреть механизм завершения потока.
1   2   3   4   5   6


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