Вниз  Java-программирование (1-ые посты)
- 13.10.2014 / 17:41
RblSb
  Пользователь

RblSb 
Сейчас: Offline
Как будут выглядеть 2 потока в одном классе? Точнее run() для второго потока
- 13.10.2014 / 17:44
Naik
  Пользователь

Naik 
Сейчас: Offline
RblSb, никак, наследуй Thread произвольным классом и используй его

Изменено Naik (13.10 / 17:47) (всего 1 раз)
- 13.10.2014 / 17:52
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
RblSb, ты, видимо, что-то недопонял. Два потока могут выглядеть так:
  1. thr1 = new Thread(this)
  2. thr2 = new Thread(this)
  3. thr1.start();
  4. thr2.start();
Это будут полноценные два потока, но выполнять одно и то же.

run() сам по себе не говорит о том, что это поток. Всё зависит от того, как ты вызываешь Thread, ибо именно Thread представляет собой поток.

В твоём случае, если каждый поток должен делать разные операции в одном классе, нужен внутренний класс:
  1. class Canv extends Canvas {
  2.  
  3.  
  4.      // Использование
  5.      new ThreadOne().start();
  6.      new ThreadTwo().start();
  7.     ...
  8.  
  9.     class ThreadOne extends Thread {
  10.         public void run() { ... }
  11.     }
  12.  
  13.     class ThreadTwo extends Thread {
  14.         public void run() { ... }
  15.     }
  16. }
Либо, если в этих потоках будет много кода, разнеси их по отдельным классам.
__________________
 let live

Изменено aNNiMON (13.10 / 17:55) (всего 2 раза)
- 14.10.2014 / 19:55
lightro
  Пользователь

lightro 
Сейчас: Offline
Что эффективнее - наследование от Runnable или создать new Runnable?
- 14.10.2014 / 20:10
Kalter
  Пользователь

Kalter 
Сейчас: Offline
lightro, не понял вопрос... наследовать Runnable нельзя, его можно развить. new Runnable тоже нельзя (как-бы), ибо Runnable - интерфейс.

Создать поток можно при развитии интерфейса Runnable или наследования от Thread. При наследовании от Thread - всё как-бы понятно. Другой способ - реализовать Runnable. После того как реализуем интерфейс Runnable, создаём Thread, где в параметры конструктора передаём экземпляр класса, развившего Runnable.
__________________
 Homo homini penis est.
- 14.10.2014 / 20:16
Ксакеп
  Модератор форума

Ксакеп 
Сейчас: Offline
lightro, говорят, что наследование лучше.
- 14.10.2014 / 20:21
lightro
  Пользователь

lightro 
Сейчас: Offline
Ксакеп, кто говорит?

Kalter, упс, это я для примера.

Изменено lightro (14.10 / 20:27) (всего 3 раза)
- 14.10.2014 / 21:14
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
А разница?
Наследовать от Thread слишком кошерно. А с Runnable два варианта, либо анонимный класс new Runnable() { }, либо расширить существующий implements Runnable. Если нужно маленькие операции выполнять, то подойдёт первый вариант, а если одну большую, то второй.
__________________
 let live
- 14.10.2014 / 21:31
lightro
  Пользователь

lightro 
Сейчас: Offline
aNNiMON, то есть разница между наследованием и созданием анонимных классов равна нулю?
- 14.10.2014 / 21:31
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
lightro, есть несколько способов создать Thread.

1. Отдельный класс. Полезен, если нужно передать в конструктор параметры и использовать в потоке. При этом можно вспомогательные методы сделать.
  1. public class WorkingThread extends Thread {
  2.  
  3.     public WorkingThread(Parameters params) { .. }
  4.  
  5.     public void run() {
  6.         workOperation1();
  7.         workOperation2();
  8.     }
  9.  
  10.     private void workOperation1() {}
  11.     private void workOperation2() {}
  12. }
  13.  
  14. // start
  15. new WorkingThread().start();

2. Реализация интерфейса Runnable в классе. Если нужно использовать поля класса Main.
  1. public class Main implements Runnable {
  2.  
  3.     public void run() { .. }
  4. }
  5.  
  6. // start 1
  7. Main main = new Main();
  8. new Thread(main).start();
  9. // start 2 (внутри класса Main)
  10. new Thread(this).start();

3. Анонимный класс, реализующий Runnable. Для маленьких операций самое то. Может использовать final переменные метода, откуда вызывается Thread.
  1. new Thread(new Runnable() {
  2.     public void run() { .. }
  3. }).start();

4. Анонимный класс, реализующий Runnable, сохранённый в поле. Основное отличие, объект Runnable создаётся лишь один раз (в случае 3, он каждый раз создаётся). Ну и нельзя использовать локальные final переменные метода.
  1. private final Runnable workingRunnable = new Runnable() {
  2.  
  3.     public void run() { .. }
  4. };
  5. // start
  6. new Thread(workingRunnable).start();

__________________
 let live
Наверх  Всего сообщений: 16875
Фильтровать сообщения
Поиск по теме
Файлы топика (794)