Как я могу передать параметр Потоку Java?

Вы можете использовать службу ngrok , которая дает вам домен, например https://c2757c5f.ngrok.io, и другие пользователи могут посещать его, обращаясь к этому URL. Кроме того, этот URL можно посещать из любого места!

Для получения дополнительной информации посетите здесь

Если вы хотите, чтобы другие пользователи могли посещать ваш сайт с вашего локального сервера, то Вы можете запустить manage.py runserver 0.0.0.0:8000. Ваше приложение видимо другим пользователям в той же сети, открыв доступ к этому http://your-ip:8000/

Вы можете узнать свой ip с помощью команды ifconfig на linux или ubuntu [ 1111]

280
задан slhck 14 February 2012 в 22:29
поделиться

8 ответов

Вам необходимо передать параметр в конструкторе объекту Runnable:

public class MyRunnable implements Runnable {

   public MyRunnable(Object parameter) {
       // store parameter for later user
   }

   public void run() {
   }
}

и вызвать его таким образом:

Runnable r = new MyRunnable(param_value);
new Thread(r).start();
355
ответ дан 23 November 2019 в 02:01
поделиться

Вы можете унаследовать класс от Runnable и во время построения (скажем) передать параметр.

Затем запустите его с помощью Thread.start (Runnable r);

Если вы означает , пока поток работает, затем просто удерживайте ссылку на производный объект в вызывающем потоке и вызывайте соответствующие методы установки (синхронизируя, где это необходимо)

3
ответ дан 23 November 2019 в 02:01
поделиться

Вы можете расширить класс Thread или Runnable класс и указать параметры по своему усмотрению. Простые примеры можно найти в документах . Я перенесу их сюда:

 class PrimeThread extends Thread {
     long minPrime;
     PrimeThread(long minPrime) {
         this.minPrime = minPrime;
     }

     public void run() {
         // compute primes larger than minPrime
          . . .
     }
 }

 PrimeThread p = new PrimeThread(143);
 p.start();

 class PrimeRun implements Runnable {
     long minPrime;
     PrimeRun(long minPrime) {
         this.minPrime = minPrime;
     }

     public void run() {
         // compute primes larger than minPrime
          . . .
     }
 }


 PrimeRun p = new PrimeRun(143);
 new Thread(p).start();
8
ответ дан 23 November 2019 в 02:01
поделиться

Либо напишите класс, реализующий Runnable, и передайте все, что вам нужно, в подходящем конструкторе, либо напишите класс, расширяющий Thread с соответствующим образом определенным конструктором, который вызывает super () с соответствующими параметрами.

7
ответ дан 23 November 2019 в 02:01
поделиться

Чтобы создать поток, вы обычно создайте свою собственную реализацию Runnable. Передайте параметры потоку в конструкторе этого класса.

class MyThread implements Runnable{
   private int a;
   private String b;
   private double c;

   public MyThread(int a, String b, double c){
      this.a = a;
      this.b = b;
      this.c = c;
   }

   public void run(){
      doSomething(a, b, c);
   }
}
9
ответ дан 23 November 2019 в 02:01
поделиться

Когда вы создаете поток, вам нужен экземпляр Runnable . Самый простой способ передать параметр - передать его в качестве аргумента конструктору:

public class MyRunnable implements Runnable {

    private volatile String myParam;

    public MyRunnable(String myParam){
        this.myParam = myParam;
        ...
    }

    public void run(){
        // do something with myParam here
        ...
    }

}

MyRunnable myRunnable = new myRunnable("Hello World");
new Thread(myRunnable).start();

Если вы затем захотите изменить параметр во время выполнения потока, вы можете просто добавить метод установки в свой запускаемый класс:

public void setMyParam(String value){
    this.myParam = value;
}

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

myRunnable.setMyParam("Goodbye World");

Конечно, если вы хотите инициировать действие при изменении параметра, вам придется использовать блокировки, что делает вещи значительно более сложный.

17
ответ дан 23 November 2019 в 02:01
поделиться

через конструктор класса Runnable или Thread

class MyThread extends Thread {

    private String to;

    public MyThread(String to) {
        this.to = to;
    }

    @Override
    public void run() {
        System.out.println("hello " + to);
    }
}

public static void main(String[] args) {
    new MyThread("world!").start();
}
41
ответ дан 23 November 2019 в 02:01
поделиться

Для анонимных классов:

В ответ на редактирование вопросов вот как это работает для анонимных классов

   final X parameter = ...; // the final is important
   Thread t = new Thread(new Runnable() {
       p = parameter;
       public void run() { 
         ...
       };
   t.start();

Именованные классы:

У вас есть класс, расширяющий Thread (или реализующий Runnable), и конструктор с параметрами, которые вы хотите передать. Затем, когда вы создаете новый поток, вы должны передать аргументы, а затем запустить поток, примерно так:

Thread t = new MyThread(args...);
t.start();

Runnable - гораздо лучшее решение, чем Thread BTW. Поэтому я бы предпочел:

   public class MyRunnable implements Runnable {
      private X parameter;
      public MyRunnable(X parameter) {
         this.parameter = parameter;
      }

      public void run() {
      }
   }
   Thread t = new Thread(new MyRunnable(parameter));
   t.start();

Этот ответ в основном совпадает с этим аналогичным вопросом: Как передать параметры объекту Thread

108
ответ дан 23 November 2019 в 02:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: