Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中使用两个线程并控制一个线程?_Java_Multithreading - Fatal编程技术网

在java中使用两个线程并控制一个线程?

在java中使用两个线程并控制一个线程?,java,multithreading,Java,Multithreading,谁能帮帮我吗。 我需要以一种方式使用两个线程,一个线程将永久运行,而另一个线程将跟踪定位指针,一些随机值以方法的形式出现。这个线程有一个逻辑,如果值等于某个值,它应该启动新线程。如果该值不相等,则应停止另一个线程 有人能给我一些代码片段块级别的代码如何实现这一点吗?创建一个实现Runnable的类。在这里,您将创建一个run方法 比如: 在主类上,您将基于创建的另一个类创建两个Thread实例 StackOverflow so1 = new StackOverflow(); StackOverf

谁能帮帮我吗。 我需要以一种方式使用两个线程,一个线程将永久运行,而另一个线程将跟踪定位指针,一些随机值以方法的形式出现。这个线程有一个逻辑,如果值等于某个值,它应该启动新线程。如果该值不相等,则应停止另一个线程


有人能给我一些代码片段块级别的代码如何实现这一点吗?

创建一个实现Runnable的类。在这里,您将创建一个run方法

比如:

在主类上,您将基于创建的另一个类创建两个Thread实例

StackOverflow so1 = new StackOverflow();
StackOverflow so2 = new StackOverflow();
Thread t1 = new Thread(so1);
Thread t2 = new Thread(so2)
然后在另一个线程中设置一个线程,以便控制它

t1.setAnotherThread(so2);
t2.setAnotherThread(so1);

然后你做你需要做的事情。

创建一个实现Runnable的类。在这里,您将创建一个run方法

比如:

在主类上,您将基于创建的另一个类创建两个Thread实例

StackOverflow so1 = new StackOverflow();
StackOverflow so2 = new StackOverflow();
Thread t1 = new Thread(so1);
Thread t2 = new Thread(so2)
然后在另一个线程中设置一个线程,以便控制它

t1.setAnotherThread(so2);
t2.setAnotherThread(so1);

然后你做你需要做的事情。

好吧,如果我没弄错的话,你想要一个可以作为线程或子线程运行的类。 但是如何使用一次运行方法来实现这一点呢?只需声明一个布尔变量,指定线程对象是子线程还是父线程,并相应地声明两个构造函数,一个将创建父线程,另一个将创建子线程,并且为了能够停止子线程,请声明另一个名为stop的变量,该变量默认为false

class ThreadExample extends Thread {

private boolean sub = false;
private ThreadExample subThread = null;
public boolean stop = false;
public ThreadExample() {
}

public ThreadExample(boolean sub) {
    this.sub = sub;
}

public void run() {
    if (sub) {
        runSubMethod();
    } else {
        runParentMethod();
    }
}

public void runParentMethod() {
    boolean running = true;
    while (running) {
        if (getRandomValue() == some_other_value) {
            if (getSubThread().isAlive()) {
                continue;
            }
            getSubThread().start();
        } else {
            getSubThread().makeStop();
        }
    }
}

public void runSubMethod(){

    while(true){
        //do stuff
        if (stop)
            break;

    }
}

public int getRandomValue() {
    //your "Random Value"
    return 0;
}

private ThreadExample getSubThread() {
    if (subThread == null) {
        subThread = new ThreadExample(true);
    }
    return subThread;
}
public void makeStop(){
    stop = true;
}

}

好的,如果我没有弄错的话,您希望有一个类可以作为线程或子线程运行。 但是如何使用一次运行方法来实现这一点呢?只需声明一个布尔变量,指定线程对象是子线程还是父线程,并相应地声明两个构造函数,一个将创建父线程,另一个将创建子线程,并且为了能够停止子线程,请声明另一个名为stop的变量,该变量默认为false

class ThreadExample extends Thread {

private boolean sub = false;
private ThreadExample subThread = null;
public boolean stop = false;
public ThreadExample() {
}

public ThreadExample(boolean sub) {
    this.sub = sub;
}

public void run() {
    if (sub) {
        runSubMethod();
    } else {
        runParentMethod();
    }
}

public void runParentMethod() {
    boolean running = true;
    while (running) {
        if (getRandomValue() == some_other_value) {
            if (getSubThread().isAlive()) {
                continue;
            }
            getSubThread().start();
        } else {
            getSubThread().makeStop();
        }
    }
}

public void runSubMethod(){

    while(true){
        //do stuff
        if (stop)
            break;

    }
}

public int getRandomValue() {
    //your "Random Value"
    return 0;
}

private ThreadExample getSubThread() {
    if (subThread == null) {
        subThread = new ThreadExample(true);
    }
    return subThread;
}
public void makeStop(){
    stop = true;
}

}下面是一个简单的想法,您可以在一个类中实现任意多个线程:

class MultipleThreads{  

   Runnable r1 = new Runnable() {
     public void run() {
       ... code to be executed ...
     }
   };

   //-----

   Runnable r2 = new Runnable() {
     public void run() {
       ... code to be executed ...
     }
   };

   //--- continue as much you like  

   public static void main (String[] args){  

      Thread thr1 = new Thread(r1);
      Thread thr2 = new Thread(r2);
      thr1.start();
      thr2.start();
   }  
}
希望能有帮助!! 对于两个线程之间的通信,一个简单的解决方案是设置一个布尔类型的volatile静态变量,并从一个线程设置该变量,然后在另一个线程中将其置于whileflag条件下。 您可以使用此方法控制另一个线程。
如果您有等待进程或Thread.sleep,并且您希望在不让线程完成的情况下中断线程,那么您可以通过捕获异常来中断线程。

下面是一个简单的想法,您可以在一个类中实现任意多的线程:

class MultipleThreads{  

   Runnable r1 = new Runnable() {
     public void run() {
       ... code to be executed ...
     }
   };

   //-----

   Runnable r2 = new Runnable() {
     public void run() {
       ... code to be executed ...
     }
   };

   //--- continue as much you like  

   public static void main (String[] args){  

      Thread thr1 = new Thread(r1);
      Thread thr2 = new Thread(r2);
      thr1.start();
      thr2.start();
   }  
}
希望能有帮助!! 对于两个线程之间的通信,一个简单的解决方案是设置一个布尔类型的volatile静态变量,并从一个线程设置该变量,然后在另一个线程中将其置于whileflag条件下。 您可以使用此方法控制另一个线程。
如果您有正在等待的进程或Thread.sleep,并且您希望在不让线程完成的情况下中断线程,您可以通过捕获异常来中断线程。

请修改您的问题并添加:1概述代码的用途,以帮助我们更好地理解问题;2当值等于某个值时,您将启动一个新线程。这个新线程做什么?当值不相等时,是否需要停止这个新启动的线程?谢谢你,实际上我只是对一件基本的事情感到困惑。为了运行多个线程,我使用不同的类来完成这个任务,这就是导致问题的原因。如果我使用同一个类,有两个线程,它们共享同一个rum方法?我该如何为每个线程运行不同的代码。你仍然没有回答rodion的问题。这一切的目的是什么?您的非编程需求是什么?你有什么密码?你把我弄丢了。至于如何为每个线程运行不同代码的问题,答案是:使用不同的类实现Runnable或extending thread。请确保按照@Sara see main方法的建议运行它们,否则它们将不会在单独的线程中运行。请修改您的问题并添加:1概述代码的用途,以帮助我们更好地理解问题;2当值等于某个值时,您将启动一个新线程。这个新线程做什么?当值不相等时,是否需要停止这个新启动的线程?谢谢你,实际上我只是对一件基本的事情感到困惑。为了运行多个线程,我使用不同的类来完成这个任务,这就是导致问题的原因。如果我使用同一个类,有两个线程,它们共享同一个rum方法?我该如何为每个线程运行不同的代码。你仍然没有回答rodion的问题。这一切的目的是什么?您的非编程需求是什么?你有什么密码?你把我弄丢了。至于有关的问题, 如何为每个线程运行不同的代码答案是:使用不同的类实现可运行或扩展线程。确保按照@Sara see main方法的建议运行它们,否则它们将不会在单独的线程中运行。