Это часть кода, который я использую в качестве примера того, как запускать несколько потоков:
import javax.swing.SwingUtilities;
public class ThreadDem {
//field
Runnable doRun;
//constructor
public ThreadDem(){
//instantiates a runnable object
doRun = new Runnable(){
//have to override the abstract method run of runnable and am
//declaring method here in this block statement
@Override
public void run() {
System.out.println("Hello from thread: "
+ Thread.currentThread());
}
};
}
public static void main (String[] args){
ThreadDem demo = new ThreadDem();
System.out.println("Hello this is from thread: " +
Thread.currentThread());
//I use the invokelater method to invoke the run method of do run on a
//seperate thread
SwingUtilities.invokeLater(demo.doRun);
}
}
Я более или менее просто взял его из документов на runnable. Однако мне трудно понять, почему он работает так. Я еще новичок в ООП и не понимаю, как я могу создать интерфейс (runnable), и если действительно мой runnable объект не является классом, как я могу определить его метод (run())... может кто-то объяснить для меня простыми словами шаг за шагом, что именно происходит в этом конструкторе, чтобы я мог понять смысл процесса? Спасибо!
То, что вы создали, называется классом Anonimous. Ссылка содержит официальное руководство, в котором объясняется, что это такое, но в двух словах - вы создали одноразовый класс, реализующий Runnable
и созданный экземпляр объекта указанного класса.
В качестве предложения - не пытайтесь решать многопоточность, прежде чем вы поймете основные понятия языка, такие как ООП и грамматика.
В Java-интерфейсах невозможно создать экземпляр, они просто определяют, какой метод должен реализовывать, чтобы реализовать этот интерфейс. Чтобы создать поток в Java, лучше всего использовать
public class ThreadDem extends Runnable
(рекомендуется)
или
public class ThreadDem extends Thread
.
В этот момент вам необходимо внедрить метод "public void run", который перезаписывает пустой из Runnable. В этот момент вы можете просто вызвать run на любом объекте типа ThreadDem.
System.out.println("Hello World!");
, Во всяком случае, эти учебники объясняют довольно много, в том числе некоторые аспекты многопоточности. Если вы находите их полезными, не стесняйтесь ответить / принять ответ.