Java 线程问题:程序没有';开始

Java 线程问题:程序没有';开始,java,multithreading,processing,Java,Multithreading,Processing,好了,伙计们,这是我得到的:我正在尝试在处理中制作一个基于线程的程序。 这个程序做的很简单,我可以处理,但是当我试图让它在线程中运行时,它取笑了我 长话短说,我试过做这样的东西: class supportClass{ [All the junk.]; }; class threadClass extends Thread{ boolean goingThread; [Some other junk.]; threadClass(){ goingThread

好了,伙计们,这是我得到的:我正在尝试在处理中制作一个基于线程的程序。 这个程序做的很简单,我可以处理,但是当我试图让它在线程中运行时,它取笑了我

长话短说,我试过做这样的东西:

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()方法以添加线程代码。如果您想拥有自己的带有参数的start()方法,可以,但不要调用run(),而是调用start()

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

其次,对于启动方法。在代码中,您提供了自己的启动方法。您没有重写Thread类的
start
方法。因此,线程永远不会处于可运行状态。Thread类的
start
方法将当前线程状态从
New
状态(刚创建)更改为
Runnable
状态(通过调用run方法即可执行)。当线程处于可运行状态时,JVM调度程序可以随时选择要执行的线程

因此,您有两件事要做(无需更改代码):首先在
start(supportClass var)
方法中,只需调用
super.start()
使其处于可运行状态。还要删除行
run(var)
,因为正如我所说的,调用线程不是程序员的工作,而是JVM调度程序。并定义一个不带参数的
run
方法

如果您想将参数传递给thread类,这取决于您的策略。如果希望SupportClass的每个实例有一个线程(这是最简单的),可以在构造函数中传递它们

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


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

    其次,对于启动方法。在代码中,您提供了自己的启动方法。您没有重写Thread类的
    start
    方法。因此,线程永远不会处于可运行状态。Thread类的
    start
    方法将当前线程状态从
    New
    状态(刚创建)更改为
    Runnable
    状态(通过调用run方法即可执行)。当线程处于可运行状态时,JVM调度程序可以随时选择要执行的线程

    因此,您有两件事要做(无需更改代码):首先在
    start(supportClass var)
    方法中,只需调用
    super.start()
    使其处于可运行状态。还要删除行
    run(var)
    ,因为正如我所说的,调用线程不是程序员的工作,而是JVM调度程序。并定义一个不带参数的
    run
    方法

    如果您想将参数传递给thread类,这取决于您的策略。如果希望SupportClass的每个实例有一个线程(这是最简单的),可以在构造函数中传递它们

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


  • 你一定要叫super.start吗?start()将被继承,不是吗?是的,您必须执行super.start,因为正如我所说的,Thread类的start方法将线程的状态更改为可运行。可运行意味着JVM调度器可以在任何时候选择它来执行。如果IngrossoD提供了自己的start方法,他必须调用super.start使其处于该状态,否则JVM调度程序将不会选择它。好的,但我不明白:你说我必须添加
    super.start()
    ,然后我必须定义一个
    run()
    方法,不带参数。但是如果我想给它一些论据呢?我只需通过
    super(supportClass)
    方法调用它,对吗?您必须调用super.start吗?start()将被继承,不是吗?是的,您必须执行super.start,因为正如我所说的,Thread类的start方法将线程的状态更改为可运行。可运行意味着JVM调度器可以在任何时候选择它来执行。如果IngrossoD提供了自己的start方法,他必须调用super.start使其处于该状态,否则JVM调度程序将不会选择它。好的,但我不明白:你说我必须添加
    super.start()
    ,然后我必须定义一个
    run()
    方法,不带参数。但是如果我想给它一些论据呢?我只需要用代码>超级(SuppC类)< /C>方法调用它,对吗?最后我做了最简单的事情:每个公共类都是公共的,C++的OOP的“朋友”系统的方法。最后我做了最简单的事情:每个公共类都是公共的,以及像C++的OOP的“朋友”系统之类的方法。