Объясните пожалуйста буквально на пальцах, простыми словами, как работает многопоточность в java.. Есть вопросы на которые я не могу найти ТОЧНЫЙ ответ, из-за чего возникает расплывчатое понимание материала. Вопрос такой, у нас есть два объекта разных типов с переопределенными методами run(), и один поток Thread, можно ли их поместить в выполнение одного потока, и могут ли они они исполняться именно одновременно? или эти два метода в потоке будут попеременно выполняться?
И вообще, объясните краткими словами тему)про всякие методы wait() и notify() читал.
Метод run() тянется из интерфейса Runnable(), который реализуется классом Thread.
Thread - это и есть класс потока.
Метод run() - это тот метод который начнет выполняться при старте потока. Как только все действия описанные в методе run() выполнится - поток завершится.
Внутри метода run() вы можете делать все что хотите. Создавать любые объекты, выполнять с ними любые действия - все это будет происходить в вашем отдельном потоке. Можете создавать и стартовать другие потоки - все что вы опишите в них будет происходить в отдельных параллельных потоках.
Потоки применяют либо чтоб ускорить выполнение каких либо действий, либо если можно какие-то действия выполнять отдельно от основного потока (например построение отчета, который долго считается, или отправка писем или ...)
Поток можно создать так
public class MyThread extends Thread{
@Override
public void run(){
...
}
}
//Тогда создание экземпляра будет выглядеть так
...
Thread myThread = new MyThread();
myThread.start(); //запуск потока
...
или так
public class MyRunnable implements Runnable{
@Override
public void run(){
...
}
}
//Тогда создание экземпляра будет выглядеть так
...
Thread myThread = new MyThread( new MyRunnable() );
myThread.start(); //запуск потока
...
Поток - это последовательность исполняемых команд. В Jav'e - команд, размещенных в методе run()
. Поэтому один поток - один метод run()
. Для двух методов run()
нужны два потока. Или один, но с другим метолом run()
:
public void run() {
object1.run();
object2.run();
}
то есть, выполняющий их последовательно. Попеременно в одном потоке исполнять разные методы технически невоэможно.
Методологически поток - это виртуальный процессор. Сейчас с помощью технологии виртуализации можно один компьютер разбить на несколько виртуальных машин и на каждую поставить собственную операционную систему. Аналогично, аппаратный процессор можно разбить на несколько виртуальных процессоров - потоков, и на каждом запустить свою программу. Для этого есть техника переключения процессора с одного потока на другой. Но техники переключения потока с одного метода на другой не сделали, потому что нет смысла.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Мне нужно блокировать кнопки после нажатия любой из них на 5 секундКак я могу это сделать? Именно на 5 вроде через Thread
Начал изучать php и столкнулся с проблемойВот я хочу чтобы к моей странице можно было подключить любое количество плагинов