13.10.2014 / 17:41 | |
RblSb Пользователь Сейчас: Offline
Регистрация: 25.07.2011
| Как будут выглядеть 2 потока в одном классе? Точнее run() для второго потока
|
13.10.2014 / 17:44 | |
Naik Пользователь Сейчас: Offline
Имя: %name% Регистрация: 14.03.2010
| RblSb, никак, наследуй Thread произвольным классом и используй его
Изменено Naik (13.10 / 17:47) (всего 1 раз) |
13.10.2014 / 17:52 | |
aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| RblSb, ты, видимо, что-то недопонял. Два потока могут выглядеть так: thr1 = new Thread(this)
thr2 = new Thread(this)
thr1.start();
thr2.start();
Это будут полноценные два потока, но выполнять одно и то же. run() сам по себе не говорит о том, что это поток. Всё зависит от того, как ты вызываешь Thread, ибо именно Thread представляет собой поток. В твоём случае, если каждый поток должен делать разные операции в одном классе, нужен внутренний класс: class Canv extends Canvas {
// Использование
new ThreadOne().start();
new ThreadTwo().start();
...
class ThreadOne extends Thread {
public void run() { ... }
}
class ThreadTwo extends Thread {
public void run() { ... }
}
}
Либо, если в этих потоках будет много кода, разнеси их по отдельным классам. __________________
let live Изменено aNNiMON (13.10 / 17:55) (всего 2 раза) |
14.10.2014 / 19:55 | |
lightro Пользователь Сейчас: Offline
Имя: Лайтро Василевски Регистрация: 13.09.2014
| Что эффективнее - наследование от Runnable или создать new Runnable?
|
14.10.2014 / 20:10 | |
Kalter Пользователь Сейчас: Offline
Имя: Гриб Откуда: Оренбург - Нежинка Регистрация: 16.10.2013
| lightro, не понял вопрос... наследовать Runnable нельзя, его можно развить. new Runnable тоже нельзя (как-бы), ибо Runnable - интерфейс.
Создать поток можно при развитии интерфейса Runnable или наследования от Thread. При наследовании от Thread - всё как-бы понятно. Другой способ - реализовать Runnable. После того как реализуем интерфейс Runnable, создаём Thread, где в параметры конструктора передаём экземпляр класса, развившего Runnable.
__________________
Homo homini penis est. |
14.10.2014 / 20:16 | |
Ксакеп Модератор форума Сейчас: Offline
Регистрация: 20.06.2012
| lightro, говорят, что наследование лучше.
|
14.10.2014 / 20:21 | |
lightro Пользователь Сейчас: Offline
Имя: Лайтро Василевски Регистрация: 13.09.2014
| Ксакеп, кто говорит?
Kalter, упс, это я для примера.
Изменено lightro (14.10 / 20:27) (всего 3 раза) |
14.10.2014 / 21:14 | |
aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| А разница? Наследовать от Thread слишком кошерно. А с Runnable два варианта, либо анонимный класс new Runnable() { }, либо расширить существующий implements Runnable. Если нужно маленькие операции выполнять, то подойдёт первый вариант, а если одну большую, то второй.
__________________
let live |
14.10.2014 / 21:31 | |
lightro Пользователь Сейчас: Offline
Имя: Лайтро Василевски Регистрация: 13.09.2014
| aNNiMON, то есть разница между наследованием и созданием анонимных классов равна нулю?
|
14.10.2014 / 21:31 | |
aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| lightro, есть несколько способов создать Thread. 1. Отдельный класс. Полезен, если нужно передать в конструктор параметры и использовать в потоке. При этом можно вспомогательные методы сделать. public class WorkingThread extends Thread {
public WorkingThread(Parameters params) { .. }
public void run() {
workOperation1();
workOperation2();
}
private void workOperation1() {}
private void workOperation2() {}
}
// start
new WorkingThread().start();
2. Реализация интерфейса Runnable в классе. Если нужно использовать поля класса Main. public class Main implements Runnable {
public void run() { .. }
}
// start 1
Main main = new Main();
new Thread(main).start();
// start 2 (внутри класса Main)
new Thread(this).start();
3. Анонимный класс, реализующий Runnable. Для маленьких операций самое то. Может использовать final переменные метода, откуда вызывается Thread. new Thread(new Runnable() {
public void run() { .. }
}).start();
4. Анонимный класс, реализующий Runnable, сохранённый в поле. Основное отличие, объект Runnable создаётся лишь один раз (в случае 3, он каждый раз создаётся). Ну и нельзя использовать локальные final переменные метода. private final Runnable workingRunnable = new Runnable() {
public void run() { .. }
};
// start
new Thread(workingRunnable).start();
__________________
let live |