Java 多线程Web服务器
嗨,我正在尝试创建一个多线程的Web服务器 我已经提到 在上面的代码中,我一直得到一个线程非法访问异常,那么为什么我一直得到这个异常呢 我想在浏览器中打开多个选项卡并打开localhost:3000,然后服务器必须打印http请求和端口号,但这种情况仅发生在第一个客户端,而不是其他客户端。它显示非法线程访问异常,程序终止Java 多线程Web服务器,java,client-server,Java,Client Server,嗨,我正在尝试创建一个多线程的Web服务器 我已经提到 在上面的代码中,我一直得到一个线程非法访问异常,那么为什么我一直得到这个异常呢 我想在浏览器中打开多个选项卡并打开localhost:3000,然后服务器必须打印http请求和端口号,但这种情况仅发生在第一个客户端,而不是其他客户端。它显示非法线程访问异常,程序终止 如果有任何页面告诉您如何在Webbrowser中显示某些内容,我们将不胜感激。正如您在类方法start()的文档中所读到的那样 如果线程已启动,则为IllegalThread
如果有任何页面告诉您如何在Webbrowser中显示某些内容,我们将不胜感激。正如您在类方法start()的文档中所读到的那样 如果线程已启动,则为IllegalThreadStateException 在代码中,只创建一次线程,并尝试多次运行它 如何修复?行前:
t.start();
你应该创建新的线程
Thread t=new Thread(new Runnable(){
@Override
public void run() {
try{
System.out.println(br.readLine());
}
catch(Exception e){
System.out.println("exc is "+e);
}
}
});
编辑:关于评论中的问题。当您启动线程时,它将开始自己的活动。例如,您可以通过调用线程对象上的
join()
方法来等待终止。线程
类的规范说明了它是如何工作的,并且说明您不能重新运行它。如果您添加异常的stacktrace会有所帮助。我正在使用trycatch块,因此我只会收到异常消息。我们只会在程序执行由于未捕获的异常而停止时才收到堆栈跟踪?我会这样做首先实现一个简单的生产者/消费者模式。这不是粗鲁,但我认为Web服务器可能有点超出你的能力。@Boris那么我如何接受来自多个客户端的连接呢?我是个新手,所以沃特一定是done@Boris无论是否超出能力,我必须在上面的评论中给出一个tryHi faramir,我已经提到,我纠正了这个问题,因为Boris也提出了同样的建议。谢谢。如果您能告诉我如何在WebBrowser中显示ahtml页面,我将不胜感激。那么,它是否在完成其运行方法后终止?尝试打开页面,但请记住,浏览器使用HTTP协议进行通信,如果希望查看html内容,则需要回复正确的HTTP响应(标题和数据)。此外,您的“Web服务器”还需要更好地处理数据-您启动新线程,并且在您可以接受新连接并启动新线程之后,但是br
可以同时更改-两个线程将争夺要读取的数据…br对于每个线程不是唯一的每个线程都有一个围绕套接字输出流的br每个a都有一个单独的TCP连接我是rite还是ami我完全工作?您只有一个WebServer
类的实例,对于这个实例,您有字段br
,所以所有内容都是共享的。您可能希望创建实现Runnable
的新类,并为每个请求创建新实例,在该类中,您应该设置br
并使用新类对象启动新线程。当然,这不是编写服务器应用程序的最佳方法,而是最简单的方法。
Thread t=new Thread(new Runnable(){
@Override
public void run() {
try{
System.out.println(br.readLine());
}
catch(Exception e){
System.out.println("exc is "+e);
}
}
});