[英]Thread issue: program doesn't start
好的,这就是我所拥有的:我正在尝试在Processing中创建基于线程的程序。 该程序的作用非常简单,我可以解决,但是当我尝试使其在线程中运行时,这很有趣!
长话短说,我试图做这样的事情:
class supportClass{
[All the junk.];
};
class threadClass extends Thread{
boolean goingThread;
[Some other junk.];
threadClass(){
goingThread = false;
[Junk.]
}
void start(supportClass var){
goingThread = true;
run(var);
goingThread = false;
}
void run(supportClass var){
[Junk which does all the work!]
}
};
这是setup()
方法:
void setup(){
[Some junk init.];
supportClass mySupportClass = new supportClass();
threadClass myClass = new threadClass();
myClass.start(mySupportClass);
}
因此,这里有两个问题:
1)框架甚至没有显示出来; 我的意思是:该程序似乎根本没有运行...;
2)由于mySupportClass
上的数据发生更改,因此我不确定所使用的赋值方法。
在StackOverflow中搜索时,我没有发现任何有关在线程中解析值的信息[正在处理中],所以...在这里!
有小费吗?
@重写超类run()方法以添加您的线程代码。 如果要使用参数自己的start()方法,可以,但是不要调用run(),请调用start()。
首先,线程永远不会执行,因为除非您自己调用,否则重载方法run(supportClass var)
将被Thread类忽略。 实际上,Thread类期望没有参数的run
方法执行。
其次,对于启动方法。 在您的代码中,您提供了自己的启动方法。 您没有覆盖Thread类的start
方法。 结果,您的线程将永远不会进入可运行状态。 Thread类的start
方法将当前线程状态从New
状态(刚刚创建)更改为Runnable
状态(准备通过调用run方法执行)。 当线程处于可运行状态时,可以由JVM调度程序随时选择执行该线程。
因此,您有2件事要做(不更改代码):首先在start(supportClass var)
方法中,只需调用super.start()
使其处于Runnable状态。 并删除run(var)
因为正如我所说,调用线程不是程序员的工作,而是JVM调度程序。 并定义一个不带参数的run
方法。
如果要将参数传递给线程类,则取决于您的策略。 如果每个SupportClass实例需要一个线程(最简单),则可以在构造函数中传递它们。
我建议您阅读这些链接以获取有关线程的更多信息:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.