Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从一个for循环中抛出线程?_Java_Java Threads - Fatal编程技术网

Java 如何从一个for循环中抛出线程?

Java 如何从一个for循环中抛出线程?,java,java-threads,Java,Java Threads,它不会创建或启动多个线程 我试图使poller类实现runnable,并使用run()调用它。还使它从线程扩展并使用start()调用它。我在调用函数pollRows()中添加了System.out.println(I),它只打印“1” public void pollRows()引发InterruptedException{ 对于(int i=1;i

它不会创建或启动多个线程

我试图使poller类实现runnable,并使用run()调用它。还使它从线程扩展并使用start()调用它。我在调用函数pollRows()中添加了System.out.println(I),它只打印“1”

public void pollRows()引发InterruptedException{
对于(int i=1;i<17;i++){
系统输出打印LN(i);
轮询器rowPollerThread=新轮询器(端口,行[i]);
rowPollerThread.start();
}
}
公共类轮询器扩展线程{
专用静态字节[]轮询字节={
(字节)0x01,(字节)0x03,(字节)0x00,(字节)0x10,(字节)0x00,(字节)0x08,(字节)0x45,(字节)0xc9
};
私有静态字节[]轮询字节;
私有静态com.fazecast.jSerialComm.SerialPort SerialPort;
私有静态行;
公共轮询器(com.fazecast.jSerialComm.SerialPort SerialPort,Row){
this.serialPort=serialPort;
this.row=行;
}
@凌驾
公开作废开始(){
试一试{
while(true){
getHelioStates();
}
}捕获(中断异常例外){
Logger.getLogger(Poller.class.getName()).log(Level.SEVERE,null,ex);
}
}
私有静态void getHelioStates()引发InterruptedException{
对于(inti=0;i
}


它只创建并启动第一个线程,已启动线程的输出与预期一致。

不要覆盖Poller类的start方法,因为start方法会导致线程开始执行。您应该重写run方法

@Override
public void run() {
    try {
        while (true) {
            getHelioStates();
        }
    } catch (InterruptedException ex) {
        Logger.getLogger(Poller.class.getName()).log(Level.SEVERE, null, ex);
    }
}

不要重写Poller类的start方法,因为start方法会导致线程开始执行。您应该重写run方法

@Override
public void run() {
    try {
        while (true) {
            getHelioStates();
        }
    } catch (InterruptedException ex) {
        Logger.getLogger(Poller.class.getName()).log(Level.SEVERE, null, ex);
    }
}

由于未定义
run()
方法,线程无法正常工作

Javadoc for
Thread
()解释了创建新线程的两种方法:

  • 将类声明为线程的子类。这个子类应该重写类Thread的run方法
  • 创建线程是为了声明一个实现可运行接口的类。然后该类实现run方法
这两种方法都应该通过调用
start()
方法来启动(这是正确的做法),但是这两种方法都需要实现
run()
来定义线程的行为(这不在上面的代码中)

run()
方法添加一些打印输出可能会有所帮助,如下所示:

@Override
public void run() {
    System.out.println("thread " + this.getName() + " is now running");
    // do other things in thread
}

这将显示所有线程都已创建,还显示调用
start()
的顺序与调用
run()
的顺序不同。

由于未定义
run()
方法,线程无法正常工作

Javadoc for
Thread
()解释了创建新线程的两种方法:

  • 将类声明为线程的子类。这个子类应该重写类Thread的run方法
  • 创建线程是为了声明一个实现可运行接口的类。然后该类实现run方法
这两种方法都应该通过调用
start()
方法来启动(这是正确的做法),但是这两种方法都需要实现
run()
来定义线程的行为(这不在上面的代码中)

run()
方法添加一些打印输出可能会有所帮助,如下所示:

@Override
public void run() {
    System.out.println("thread " + this.getName() + " is now running");
    // do other things in thread
}

这将显示所有线程都已创建,还显示调用
start()
的顺序与调用
run()
的顺序不同。

创建新线程需要
start()
而不是
run()
。但你说你试过了。发生了什么事?有错误吗?你怎么知道没有额外的线程?能否在无限循环之前添加一些
System.out.println()
进行调试?
getHelioStates()
做什么?我想这与以下事实有关:启动的线程永远不会结束,因为run方法包含一个bucle,而getHelioStates阻塞(true)呢?在任何情况下,只需在for循环的最后一行添加日志。您将看到有多少线程已启动。该线程有什么问题?有什么特别的原因需要重新发明wheal吗?“我想这与启动的线程永远不会结束这一事实有关,因为run方法包含一个bucle,而(true)“不,这是因为您从未启动/启动另一个线程。调用
start()
而不是
run()
您需要
start()
而不是
run()
来创建新线程。但你说你试过了。发生了什么事?有错误吗?你怎么知道没有额外的线程?能否在无限循环之前添加一些
System.out.println()
进行调试?
getHelioStates()
做什么?我想这与以下事实有关:启动的线程永远不会结束,因为run方法包含一个bucle,而getHelioStates阻塞(true)呢?在任何情况下,只需在for循环的最后一行添加日志。您将看到有多少线程已启动。该线程有什么问题?有没有什么具体的原因让我们重新发明风团?“我想这与