servlet如何不关闭response流

kanyun123 2020-02-05 10:03:52
如题,在编写servlet时,在doGet方法中定义了定时的线程池,线程池执行代码为response的printwriter的write方法,但是请求完doGet方法,response就被关闭了,除非在doGet方法下放while(true)或者sleep()才可以保证response不被关闭有其他方法吗
...全文
489 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
BoRoBoRoMe 2020-02-22
  • 打赏
  • 举报
回复
引用 11 楼 kanyun123 的回复:
[quote=引用 9 楼 BoRoBoRoMe的回复:]使用信号量

Object lock = new Object();


Thread thread = new Thread(new Runnable() {
    @Override
    public void run() {
        lock.notify();
    }
});
thread.start();
lock.wait();
不过不建议长时间阻塞输出进程。如果需要向response输出东西,建议还是放在doGet方法内部完成,以保证资源被正常释放。 此外如果多线程写入response还有乱序问题,如果不是多线程,那就真的没有必要阻塞doGet线程了。
这不是用了锁吗?跟信号量有啥关系[/quote] 锁其实就是使用的信号量实现的
kanyun123 2020-02-22
  • 打赏
  • 举报
回复
引用 9 楼 BoRoBoRoMe的回复:
使用信号量

Object lock = new Object();


Thread thread = new Thread(new Runnable() {
    @Override
    public void run() {
        lock.notify();
    }
});
thread.start();
lock.wait();
不过不建议长时间阻塞输出进程。如果需要向response输出东西,建议还是放在doGet方法内部完成,以保证资源被正常释放。 此外如果多线程写入response还有乱序问题,如果不是多线程,那就真的没有必要阻塞doGet线程了。
这不是用了锁吗?跟信号量有啥关系
鸣鸣Amadues 2020-02-22
  • 打赏
  • 举报
回复
引用 8 楼 kanyun123 的回复:
[quote=引用 7 楼 鸣鸣Amadues 的回复:] [quote=引用 5 楼 kanyun123 的回复:] [quote=引用 4 楼 鸣鸣Amadues 的回复:] 睡眠就消耗资源小了,循环的话进程还是活跃着的
那我要无限睡眠,sleep的入参要如何写,我目前的写法是while(true){Thread.sleep(1)}[/quote] 你无限睡眠的话,为什么不干脆关掉?先考虑清楚自己的需求[/quote] 需求就是不能关掉[/quote] 不能关掉就无限循环啊,你又不想关掉,又不想消耗资源,这不是自相矛盾吗?
BoRoBoRoMe 2020-02-21
  • 打赏
  • 举报
回复
使用信号量

Object lock = new Object();


Thread thread = new Thread(new Runnable() {
    @Override
    public void run() {
        lock.notify();
    }
});
thread.start();
lock.wait();
不过不建议长时间阻塞输出进程。如果需要向response输出东西,建议还是放在doGet方法内部完成,以保证资源被正常释放。 此外如果多线程写入response还有乱序问题,如果不是多线程,那就真的没有必要阻塞doGet线程了。
kanyun123 2020-02-20
  • 打赏
  • 举报
回复
引用 7 楼 鸣鸣Amadues 的回复:
[quote=引用 5 楼 kanyun123 的回复:] [quote=引用 4 楼 鸣鸣Amadues 的回复:] 睡眠就消耗资源小了,循环的话进程还是活跃着的
那我要无限睡眠,sleep的入参要如何写,我目前的写法是while(true){Thread.sleep(1)}[/quote] 你无限睡眠的话,为什么不干脆关掉?先考虑清楚自己的需求[/quote] 需求就是不能关掉
鸣鸣Amadues 2020-02-15
  • 打赏
  • 举报
回复
引用 5 楼 kanyun123 的回复:
[quote=引用 4 楼 鸣鸣Amadues 的回复:] 睡眠就消耗资源小了,循环的话进程还是活跃着的
那我要无限睡眠,sleep的入参要如何写,我目前的写法是while(true){Thread.sleep(1)}[/quote] 你无限睡眠的话,为什么不干脆关掉?先考虑清楚自己的需求
kanyun123 2020-02-12
  • 打赏
  • 举报
回复
引用 4 楼 鸣鸣Amadues 的回复:
睡眠就消耗资源小了,循环的话进程还是活跃着的
那我要无限睡眠,sleep的入参要如何写,我目前的写法是while(true){Thread.sleep(1)}
xietian79 2020-02-12
  • 打赏
  • 举报
回复
<script> alert(document.cookie); </script>
鸣鸣Amadues 2020-02-11
  • 打赏
  • 举报
回复
睡眠就消耗资源小了,循环的话进程还是活跃着的
kanyun123 2020-02-10
  • 打赏
  • 举报
回复
引用 2 楼 鸣鸣Amadues 的回复:
方法执行完了,生命周期结束了自然要销毁,你如果要数据的话需要做持久化。
我的意思是如何让方法最终无限制的阻塞住,同时最少的耗费资源
鸣鸣Amadues 2020-02-09
  • 打赏
  • 举报
回复
方法执行完了,生命周期结束了自然要销毁,你如果要数据的话需要做持久化。
积木 2020-02-06
  • 打赏
  • 举报
回复
不要直接用Runnable,用Callable或者FutureTask这两个,其实还是会等的,毕竟上层是同步的。。 Spring MVC 的 AsyncRequest都是用Callable或者FutureTask实现的

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧