java - 不进入线程方法

标签 java multithreading

我正在从网上编写代码来创建一个聊天应用程序。在对我的程序进行故障排除以找出它为什么不工作之后,我发现我的运行方法中的代码没有被访问。这是代码片段

public void listen()
{
    listen = new Thread("Listen") {
        public void run()
        {
            writeMessage("Working in here");
            while (true) {
                String message = client.receive();
                if (message.startsWith("/c/")) {
                    client.setID(Integer.parseInt(message.substring(3, message.length())));
                    writeMessage("Successfully connected to server" + client.getID());
                }
            }
        }
    };
}

它正在到达 listen 方法本身,因为如果我在声明线程之前使用 write message 命令,它会为我打印出消息,看看这个为什么它不会再进入的任何想法?

谢谢

最佳答案

在您的Thread 上调用start() 即可:

public void listen()
{
    listen = new Thread("Listen") {
        public void run()
        {
            writeMessage("Working in here");
            while (true) {
                String message = client.receive();
                if (message.startsWith("/c/")) {
                    client.setID(Integer.parseInt(message.substring(3, message.length())));
                    writeMessage("Successfully connected to server" + client.getID());
                }
            }
        }
    };
    listen.start(); // <-- Add this line
}

此外,您通常不想扩展 Thread(您在这里使用的是匿名类)。通常你会想要创建一个 Runnable 并将其传递给 Thread 的构造函数:

Runnable r = new Runnable() {
    @Override
    public void run()
    {
        // Do some work here
    }
};

Thread listen = new Thread(r, "Listen");
listen.start();

或者更好的是,使用 Executor,创建您自己的 Thread 对象的理由不多。

关于java - 不进入线程方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36044006/

相关文章:

java - 任务 ID 作为线程池中的线程名称

c++ - 为什么 eglMakeCurrent 因 EGL_BAD_ALLOC 而失败?

c++ - VS2012 中的并发分析 - Reader Writer Locks

java - 为什么我无法创建自定义 String 类的实例,而我能够创建自定义 System 类的实例

java - Java中不使用libpcap进行网络数据包捕获

java - 如何从字符串列表数据集创建字符串数据集 Spark Java

java - 使用 5 个线程添加数字

java - 非同步 WeakHashMap 有害吗?

java - 如何在 Spring Web Flow 监听器中检测重定向?

java - 忙自旋以减少上下文切换延迟(java)