Программы, написанные в Java, работают как минимум с одним потоком. Он называется главным (main). Несмотря на это, в фоновом режиме подобных «операций» довольно много. Примеры:

  • манипуляции с памятью;
  • системные управления;
  • обработка сигналов.

Но программа главным принимает первый поток. Отсюда возникает понятие многопоточности. Комментарии излишни. Это – одновременное выполнение более одного потока в пределах конкретного приложения.

Внимание: если процессор на задействованном устройстве одноядерный, выполняется только один поток. В этом случае процессорное время будет делиться между несколькими процессами и имеющимися потоками.

Создание – как начать работу со Thread

Создавать рассматриваемые «элементы» можно несколькими способами. Выбор зависит от особенностей класса. Когда он предусматривает множество возможностей, лучше применять интерфейс Runnable. В противном случае рекомендуется обратить внимание на наследование от класса Thread.

Первый вариант применяется на практике чаще. Это связано с тем, что Java обладает поддержкой реализации нескольких интерфейсов. А значит, можно наследовать другие классы.

Создание через интерфейс

Для того, чтобы справиться с поставленной задачей, потребуется:

  • создать Thread (это – название входного потока, является объектом);
  • передать объект runnable класса;
  • вызвать метод start(), отвечающий за исполнение run() в отдельном потоке.

За счет описанных манипуляций будет произведено обеспечение работоспособности public void run() и реализация интерфейса java.lang.Runnable.

Вот пример создания new thread через интерфейс:

package ua.com.prologistic;
 
public class HeavyWorkRunnable implements Runnable {
 
    @Override
    public void run() {
        System.out.println("Начало обработки в отдельном потоке - " + Thread.currentThread().getName());
        try {
            Thread.sleep(1000);
            // обработка базы данных
            doDBProcessing();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("Завершение обработки в отдельном потоке - " + Thread.currentThread().getName());
    }
 
    // метод псевдообработки базы данных
    private void doDBProcessing() throws InterruptedException {
        Thread.sleep(5000);
    }
 
}

Наследование класса Thread

Для того, чтобы предопределить метод run(), можно прибегнуть у наследованию java.lang.Thread. Вот пример реализации поставленной задачи:

package ua.com.prologistic;
 
public class MyThread extends Thread {
 
    public MyThread(String name) {
        super(name);
    }
 
    @Override
    public void run() {
        System.out.println("Начало " + Thread.currentThread().getName());
        try {
            Thread.sleep(1000);
            // Обработка базы данных в качестве примера
            doDBProcessing();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("Завершение потока " + Thread.currentThread().getName());
    }
    // метод псевдообработки базы данных
    private void doDBProcessing() throws InterruptedException {
        Thread.sleep(5000);
    }
     
}

Для того, чтобы понять, как работает соответствующая возможность, стоит взглянуть на пример программы:

package ua.com.prologistic;
 
public class ThreadRunExample {
 
    public static void main(String[] args){
        Thread t1 = new Thread(new HeavyWorkRunnable(), "t1");
        Thread t2 = new Thread(new HeavyWorkRunnable(), "t2");
        System.out.println("Стартуем runnable потоки");
        t1.start();
        t2.start();
        System.out.println("Runnable потоки в работе");
        Thread t3 = new MyThread("t3");
        Thread t4 = new MyThread("t4");
        System.out.println("Стартуем наши кастомные потоки");
        t3.start();
        t4.start();
        System.out.println("Кастомные потоки в работе");
         
    }
}

Методы Thread

Для того, чтобы работать с рассматриваемым «функционалом», применяются различные методы. Далее рассмотрим самые распространенные варианты в управляемом интерфейсе.

Метод Run

Применяется при очистке всего ресурса. Это значит, что происходит следующее:

  • закрываются все файлы;
  • отправляются предупреждения;
  • выполняются иные функции.

Можно сохранять состояния. Shutdownhook применяется, когда код должен выполняться до завершения работы JVM.

Метод AddShutdownHook

Применяется при регистрации потоков на виртуальных машинах. Имеет отношение к классу Runtime

Метод Flush

Используя threads, программеры работают с огромным количеством методов. У класса Writer есть Flush (). Он используется для того, чтобы осуществлять очистку писателя. Это значит, что происходит удаление информации из любого элемента. Никаких значений не возвращает, параметры не принимает.

Запомнить стоит следующее:

  • синтаксис: public void flush();
  • параметры – отсутствуют;
  • применение – очистка писателя;
  • возвращаемое значение – нет.

Чтобы лучше понимать принцип действия flushing, стоит рассмотреть наглядный пример.

Пример применения Flush

Вот программа, которая объяснит соответствующий вопрос:

// Java-программа для демонстрации
// Пишущий метод flush ()
  
import java.io.*;
  
class GFG {
    public static void main(String[] args)
    {
  
        // Строчка, которую хочется использовать в писателе
        String str = "GeeksForGeeks";
  
        try {
  
            // Создание экземпляра  Writer
            Writer writer
                = new PrintWriter(System.out);
  
            // Запись строчки выше автору
            // Помещение в писателя
            // пока не напечатано на консоли
            writer.write(str);
  
            // Осуществление чистки писателя
            // при помощи метода flush ()
            writer.flush();
        }
        catch (Exception e) {
            System.out.println(e);
        }
    }
}

На экран будет выведено: GeegForGeeks.

Как лучше разобраться в теме

Для того, чтобы понимать не только то, что собой представляют в программировании такие слова как true, false, while, for и так далее, но и разобраться в рассмотренной теме более подробно, стоит посетить специализированные курсы.

Процесс обучение может быть организован очно или дистанционно. Пользователи получат познания в том, что такое потоки данных в Java 1), как их использовать в том или ином случае. Программы есть как для новичков, так и для тех, кто уже умеет кодить. В конце обучения все завершившие курс получат сертификаты установленного образца. Во время учебы каждый «студент» сможет пообщаться с кураторами и опытными программистами в выбранном направлении.

Курсы доступны и разнообразны. Предварительно можно выбрать обучение основам программирования на Джаве или иную специализацию. Все это поможет стать грамотным специалистом и создавать уникальные собственные программы «с нуля». Все так трудно, как кажется. Справиться с поставленной задачей способен каждый. Это лишь вопрос времени. Даже далекий от программирования человек может освоить кодинг на Джаве.

Многопоточность в Java