Java:启动线程(替代在构造函数中启动)

标签 java multithreading

是否有另一种方法可以在创建对象时(调用构造函数时)启动线程。我知道你不能在构造函数中启动线程。但是,如果我在实现 Runnable 的类(类称为 Tasks)中有两个方法:run()、continuousRecv()。 run() 方法调用 continuousRecv() 函数。 continuousRecv() 做了一些事情。然后我在公共(public)类任务中创建一个名为 startContRecv() 的私有(private)类,并在构造函数调用中启动线程,就像这样

Thread t1 = new Thread(new Tasks());
t1.start();

我的代码:

import java.lang.Runnable;

public class Tasks implements Runnable {
    public Tasks() {
        startContinousReceive conRecv = new startContinousReceive();
    }

    public void continuiousReceive() {
        while (true) {
            //Code to executed
        }
    }

    public void run() {
        continuiousReceive();
    }

    //PRIVATE CLASS WHICH STARTS THREAD
    //INSTANCE OF PRIVATE CLASS IS MADE IN CONSTRUCTOR OF TASKS CLASS

    private class startContinousReceive {
        public startContinousReceive() {
            Thread t1 = new Thread(new Tasks());
            t1.start();
        }
    }
}

最佳答案

您将得到一个实例化 Tasks 对象的无限循环,这肯定会以 OutOfMemoryError 结束。您实例化任务的 object1,它又实例化您的私有(private)类,私有(private)类再次实例化任务的另一个对象 2,然后循环重新开始。

关于Java:启动线程(替代在构造函数中启动),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31229692/

相关文章:

java - 在 pageObject 类中设置 WebDriver,然后在测试用例中调用它

java - 如何在 Junit 中测试 java 单例的不同实例

Wpf 工具包 AutoCompleteBox 在后台线程上搜索

java - 如何将 JPA 关系添加到持久化实体的属性子集列表?

java - jOOQ:DataAccessException 和约束

java - 套接字不通过多线程 java 程序发送/接收

java - JavaFX 中的 Platform.runLater 和 Task

Java Fork Join 池吃掉所有线程资源

java - 使用 Smooks 读取 CSV

c++ - 有时无法从/proc/self/maps 获取堆栈范围