多线程,貌似死锁了,大家帮忙看下

问题描述

多线程,貌似死锁了,大家帮忙看下

我写了个三个类,一个监听服务器类Listener,一个服务请求处理类Handler,一个服务请求类Runner。
想要用Runner发送请求,Listener收到请求后交给Handler处理,Handler再返回一组数据给Runner,
现在Listener收到请求后就执行不下去了,大神们帮忙看下。

代码
Listener.java

 public class Listener implements Runnable {
    private static final int poolSize = Runtime.getRuntime()
            .availableProcessors();
    ExecutorService service;
    ServerSocket server;

    public Listener(int port) throws IOException {
        server = new ServerSocket(port);
        service = Executors.newFixedThreadPool(poolSize);
    }

    public static void main(String[] args) {// 启动监听服务器
        try {
            Thread t = new Thread(new Listener(9528));
            t.start();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void run() {
        Socket in;
        while (true) {// 一直等待新请求进来
            try {
                in = server.accept();// 获取请求
                System.out.println("有新请求进来");
                service.submit(new Handler(in));// 处理请求
            } catch (IOException e) {
                e.printStackTrace();
                service.shutdown();
            }
        }
    }
}

Handler.java

 public class Handler implements Runnable {
    private Socket socket;

    public Handler(Socket in) {
        this.socket = in;
    }

    @Override
    public void run() {
        try {
            BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
            System.out.println(br.readLine());
            OutputStream out = socket.getOutputStream();
            out.write(new String(System.currentTimeMillis()+"").getBytes());

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}

Runner.java

 public class Runner {
    public static void main(String[] args) throws UnknownHostException, IOException {
        for(int i =0 ;i<10;i++){
            Socket s = new Socket(InetAddress.getLocalHost(),9528);

            BufferedReader reader=new BufferedReader(new InputStreamReader(s.getInputStream()));
            System.out.println(reader.readLine());
            OutputStream out=s.getOutputStream();
            out.write(new String("request"+i).getBytes());
            out.flush();
        }
    }
}

解决方案

in = server.accept();
这是阻塞的,如果没有连接上,它会一直卡在这里。

而且你整个流程都不对

解决方案二:

刚才测试了一下,是service.submit(new Handler(in));这句话好像没有开启线程,没有运行handler中的run函数,导致server.accept()一直等待

时间: 2024-08-22 14:32:14

多线程,貌似死锁了,大家帮忙看下的相关文章

各位大神帮忙看下一个JAVA多线程问题

问题描述 各位大神帮忙看下一个JAVA多线程问题 public class ttt { public static void main(String args[]) { account a=new account(); person person1=new person(); person person2=new person(); person1.cunkuanjine=1000; person2.cunkuanjine=2000; person1.zhanghu=a; person2.zha

java多线程问题 求各位大神帮忙看下

问题描述 java多线程问题 求各位大神帮忙看下 就是要创建100个线程,每个线程都对sum值进行加一,如果我注释掉sleep(1);的话就会输出0 没有注释掉就会正常输出1-100请问 这是为什么啊?谢谢. public class test1 { private static int sum=0; private static Object obj=new Object(); public static void main(String[] args) throws InterruptedE

mfc-大神们,新年快乐!!!我用MFC编写的串口助手,创建多线程,烦请帮忙看下哪里有问题呢,为什么不能显示

问题描述 大神们,新年快乐!!!我用MFC编写的串口助手,创建多线程,烦请帮忙看下哪里有问题呢,为什么不能显示 数据丢包是因为编辑框显示荒废时间,所以我把编辑框显示放到线程里面,可以不能与接收数据同步正确的显示,还会出现停止运行的错误,狂帮帮忙,看下,呜呜!!!! 解决方案 内存指针的问题,仔细调试下.

jsp-求教:哪位大神帮忙看下代码,本人小白,实在不知道哪里有问题!!

问题描述 求教:哪位大神帮忙看下代码,本人小白,实在不知道哪里有问题!! 代码如下,登陆页面,把java逻辑放到了后台页面上,运行的时候没有报错,但是不跳转.测试账号密码正确不跳转因为没写,但是测试账号密码错误的情况下也不跳转. <%@ page language=""java"" import=""java.util.*java.sql.*info.DataBase"" pageEncoding=""

为什么我拖拽后的控件回不去!!帮忙看下代码是什么问题!!谢谢

问题描述 为什么我拖拽后的控件回不去!!帮忙看下代码是什么问题!!谢谢 这是JAVA代码 package com.example.test; import com.example.test1.R; import android.annotation.SuppressLint; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; i

xml-struts配置问题大家帮忙看下错误在哪里

问题描述 struts配置问题大家帮忙看下错误在哪里 struts文件 /404.jsp /photo.jsp loginAction public class LoginAction extends ActionSupport implements ModelDriven{ private UserService userService; private LoginInfo loginInfo=new LoginInfo(); public String execute(){ System.o

有会js的么,可以帮忙看下代码哪里有问题么

问题描述 有会js的么,可以帮忙看下代码哪里有问题么我想做一个将数据库一条记录删除,在每条记录前都会动态生成一个checkbox选项,勾选后可以将其删除,可是现在貌似itemcd的值一直都没有传过来,不知道是怎么回事<scripttype="text/javascript">functiongetBox(){varcd="";varcount=0;varids=document.getElementsByName("user.itemcd&qu

json校验格式报错,帮忙看下。

问题描述 json校验格式报错,帮忙看下. { "deplist": [ { bumen: 95, bound_id: "餐饮部", pad_sbound: "甜品类", pad_tab: 1 }, { bumen: 96, bound_id: "餐饮部", pad_sbound: "饮料类", pad_tab: 2 } ] } err info: bumen: 95, ------------------

c#3-求好心人帮忙看下事件不触发

问题描述 求好心人帮忙看下事件不触发 C.MOUSEDOWN事件怎么都不触发求大神帮忙看下谢谢啊看看谢谢搞了几天--看下看看谢谢搞了几天--看下 解决方案 看下事件有没有挂钩到事件处理函数 解决方案二: 代码都不帖,怎么帮你看? 解决方案三: 你先把代码贴出来啊 ,没有代码 怎么看 解决方案四: 求帮忙----------------------