好的伙计们,这就是我所拥有的:我正在尝试在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中搜索我没有找到任何关于在线程中解析值的信息[在处理中],所以......我在这里!
任何提示?
答案 0 :(得分:3)
@Override超类run()方法添加你的线程代码。如果你想拥有你自己的带参数的start()方法,很好,但不要调用run(),请调用start()。
答案 1 :(得分:1)
首先,您的线程永远不会执行,因为Thread类会忽略重载的方法run(supportClass var)
,除非您自己调用它。事实上,Thread类期望run
方法没有参数执行。
其次,对于start方法。在您的代码中,您提供了自己的启动方法。您没有覆盖Thread类的start
方法。因此,您的线程将永远不会处于可运行状态。 Thread类的start
方法将当前线程状态从New
状态(刚创建)更改为Runnable
状态(准备通过调用run方法执行)。当线程处于Runnable状态时,JVM调度程序可以随时选择它来执行。
因此,您有两件事要做(不更改代码):首先在start(supportClass var)
方法中,只需调用super.start()
使其处于Runnable状态。并且还删除了行run(var)
,因为正如我所说,调用Thread而不是JVM调度程序不是程序员的工作。并定义一个没有参数的run
方法。
如果要将参数传递给线程类,则取决于您的策略。如果你想在每个SupportClass实例中使用一个线程(最简单),你可以在构造函数中传递它们。
我建议你阅读这些链接以获得有关线程的更多信息: