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

时间:2010-12-26 02:20:35

标签: java multithreading

有人可以帮帮我吗 我需要使用两个线程,一个线程将永久运行(true)并跟踪一个定位指针(某个随机值来自一个方法)。这个线程有一个逻辑,如果值等于某个东西,它应该启动新线程。如果值不相等,则应该停止另一个线程。

有人可以给我一些关于如何实现这个的代码片段(块级别)吗?

3 个答案:

答案 0 :(得分:0)

创建一个实现Runnable的类。在那里你将制作一个run()方法。

像:

public class StackOverflow implements Runnable{

private Thread t = null;

public void run(){
}

public void setAnotherThread(Thread t){
 this.t = t;
}


}

在主类上,您将根据您创建的另一个类创建2个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);

然后你做你需要做的事。

答案 1 :(得分:0)

好的,如果我没有弄错的话,你想要一个可以作为“线程”运行的类,或者作为一个(让它称之为)“子线程”运行。 但是如何使用一种运行方法呢?只是声明一个布尔变量,指定线程对象是子线程还是父线程,并相应地声明两个构造函数,一个将创建一个父线程,另一个将创建一个子线程,并能够停止该子线程-thread声明另一个名为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;
}

}

答案 2 :(得分:0)

这是一个简单的想法,如何在类中实现任意数量的线程:

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静态变量,并从一个线程设置它并在另一个线程中将其置于while(flag)条件。 您可以使用此方法控制其他线程 如果你有等待进程或Thread.sleep()并且你想要在不完成它的情况下中断线程,那么通过捕获异常来中断。