0

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

任何提示?

4

2 回答 2

3

@Override the superclass run() method to add your thread code. If you want to have your very own start() method with parameters, fine, but do not call run(), call start().

于 2013-02-20T15:52:21.333 回答
1

首先,您的线程将永远不会执行,因为您的重载方法run(supportClass var)将被 Thread 类忽略,除非您自己调用它。事实上,Thread 类期望run执行一个没有参数的方法。

其次,对于启动方法。在您的代码中,您提供了自己的启动方法。您没有覆盖startThread 类的方法。结果,您的线程将永远不会进入可运行状态。Thread类的start方法将当前线程状态从一个New状态(刚刚创建)变为一个Runnable状态(通过调用run方法准备执行)。当线程处于Runnable状态时,JVM调度器可以随时选择执行。

因此,您有两件事要做(无需更改代码):首先在start(supportClass var)方法中,只需调用super.start()使其处于可运行状态即可。并且还要删除该行run(var),因为正如我所说,调用线程不是程序员的工作,而是调用 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/
于 2013-02-20T17:04:45.903 回答