首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多线程WebServer

多线程WebServer
EN

Stack Overflow用户
提问于 2013-09-22 02:30:47
回答 1查看 519关注 0票数 0

您好,我正在尝试创建一个多线程I`m服务器,我已经介绍了Link 1 Link 2

代码语言:javascript
运行
复制
import java.net.*;
import java.io.*;
public class WebServer {

    ServerSocket server;
    public WebServer() {
        try {
            server=new ServerSocket(3000);
        } catch (IOException ex) {
            System.out.println("exc in const "+ex.getMessage());
        }
    }
    Socket client;
    BufferedReader 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);
                    }
                } 
            });
    public void RUN(){

         while(true){
            try {
                client=server.accept();
                   System.out.println(client.getPort());
                if(client!=null){
                   r=new BufferedReader(new InputStreamReader(client.getInputStream()));
                   t.start();
                }
            } catch (IOException ex) {
                System.out.println("ex is "+ex.getMessage());
            }
         }
    }
    public static void main(String[] args)  {
        WebServer webserver=new WebServer();
       try {
                webserver.RUN();
            } catch (Exception e) {
            System.out.println("main "+e);
        }          
    }
}

在上面的代码中,我一直得到一个线程非法访问异常,那么为什么我一直得到这个异常呢?我想在浏览器中打开多个选项卡,打开localhost:3000,然后服务器必须打印http请求和端口号,但这只发生在第一个客户端,而不是其他客户端,它显示illegalThreadAccess异常,程序终止

如果有任何页面告诉我们如何在how浏览器中显示某些内容,我将非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2013-09-22 03:06:04

您可以在Thread类的文档中看到,如果线程已经启动,则方法start()抛出IllegalThreadStateException。

在您的代码中,您只创建线程一次,并且尝试多次运行它。

如何修复?行前:

代码语言:javascript
运行
复制
t.start();

你应该创建新的线程

代码语言:javascript
运行
复制
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()方法等待终止。Thread类的规范说明了它是如何工作的,并且说您不能重新运行它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18936113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档