线程问题:程序无法启动

时间:2013-02-20 15:35:30

标签: java multithreading processing

好的伙计们,这就是我所拥有的:我正在尝试在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中搜索我没有找到任何关于在线程中解析值的信息[在处理中],所以......我在这里!

任何提示?

2 个答案:

答案 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实例中使用一个线程(最简单),你可以在构造函数中传递它们。

我建议你阅读这些链接以获得有关线程的更多信息:

  1. http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html
  2. http://docs.oracle.com/javase/tutorial/essential/concurrency/