有人可以帮帮我吗 我需要使用两个线程,一个线程将永久运行(true)并跟踪一个定位指针(某个随机值来自一个方法)。这个线程有一个逻辑,如果值等于某个东西,它应该启动新线程。如果值不相等,则应该停止另一个线程。
有人可以给我一些关于如何实现这个的代码片段(块级别)吗?
答案 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()并且你想要在不完成它的情况下中断线程,那么通过捕获异常来中断。