在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方法的建议运行它们,否则它们将不会在单独的线程中运行。