【问题标题】:Java program freezes until socket connection is madeJava 程序冻结,直到建立套接字连接
【发布时间】:2011-04-04 06:18:56
【问题描述】:

我正在从头开始用 Java 制作一个简单的 telnet 实现。 我已经在客户端和服务器之间建立了一个简单的套接字连接。我的问题只是整个服务器应用程序在等待连接时冻结 - 即使我在单独的线程中运行它。有没有(最好)简单的方法来解决这个问题?

线程启动器sn-p:

    worker slave = new worker();
    Thread slaveThread = new Thread(slave);
    slaveThread.run();

线程sn-p:

public class worker 实现 Runnable{

public void run()
{
    try
    {
        ServerSocket srv = new ServerSocket(1337);
        System.out.println("Thread is running!");

        Socket clientSocket = srv.accept();
        System.out.println("Connection made.");
    }catch (IOException e){
        System.out.println("Failed.");

    }

提前致谢!

Java 新手

【问题讨论】:

  • 但是您是否正确运行了单独的线程?你的问题表明不是。但是,如果没有代码,我们所能做的就是猜测。
  • 让我猜猜,你是通过调用run()'启动线程'?
  • @Ishtar,我也在想同样的事情。
  • @both:我也是!我们会看看他是否回应。
  • @Mike 思想相似;)

标签: java sockets telnet


【解决方案1】:

是的,我通过调用 run() 来启动线程

虽然 Thread 实现了 Runnable,但您不应该调用 run()。您应该调用Thread.start(),它在新线程中调用run()。如果你直接调用run()当前线程是执行它的线程,而不是你创建的线程。

【讨论】:

  • 我应该在 run() 之前将 Thread.Start() 放在线程本身中还是在“主”文件中? (我有两个单独的文件,main 和 worker),还是应该将其用作“SlaveThread.start(); 而不是 SlaveThread.run();?
  • @Java 新手,在您创建的 Thread 对象上调用 start。不要在run() 内调用它。即slaveThread.start() 而不是slaveThread.run()
  • 这非常有效。谢谢迈克。我会批准你的回答:-)。
猜你喜欢
  • 1970-01-01
  • 2022-08-05
  • 2021-05-10
  • 1970-01-01
  • 2018-06-05
  • 2018-02-18
  • 2021-04-08
  • 1970-01-01
相关资源
最近更新 更多