Вы можете использовать службу ngrok , которая дает вам домен, например https://c2757c5f.ngrok.io
, и другие пользователи могут посещать его, обращаясь к этому URL. Кроме того, этот URL можно посещать из любого места!
Для получения дополнительной информации посетите здесь
Если вы хотите, чтобы другие пользователи могли посещать ваш сайт с вашего локального сервера, то Вы можете запустить manage.py runserver 0.0.0.0:8000
. Ваше приложение видимо другим пользователям в той же сети, открыв доступ к этому http://your-ip:8000/
Вы можете узнать свой ip с помощью команды ifconfig
на linux или ubuntu [ 1111]
Вам необходимо передать параметр в конструкторе объекту 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();
Вы можете унаследовать класс от Runnable и во время построения (скажем) передать параметр.
Затем запустите его с помощью Thread.start (Runnable r);
Если вы означает , пока поток работает, затем просто удерживайте ссылку на производный объект в вызывающем потоке и вызывайте соответствующие методы установки (синхронизируя, где это необходимо)
Вы можете расширить класс 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();
Либо напишите класс, реализующий Runnable, и передайте все, что вам нужно, в подходящем конструкторе, либо напишите класс, расширяющий Thread с соответствующим образом определенным конструктором, который вызывает super () с соответствующими параметрами.
Чтобы создать поток, вы обычно создайте свою собственную реализацию 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);
}
}
Когда вы создаете поток, вам нужен экземпляр 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");
Конечно, если вы хотите инициировать действие при изменении параметра, вам придется использовать блокировки, что делает вещи значительно более сложный.
через конструктор класса 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();
}
В ответ на редактирование вопросов вот как это работает для анонимных классов
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