如題,在撰寫servlet時,在doGet方法中定義了定時的執行緒池,執行緒池執行代碼為response的printwriter的write方法,但是請求完doGet方法,response就被關閉了,除非在doGet方法下放while(true)或者sleep()才可以保證response不被關閉有其他方法嗎
uj5u.com熱心網友回復:
不要直接用Runnable,用Callable或者FutureTask這兩個,其實還是會等的,畢竟上層是同步的。。Spring MVC 的 AsyncRequest都是用Callable或者FutureTask實作的
uj5u.com熱心網友回復:
方法執行完了,生命周期結束了自然要銷毀,你如果要資料的話需要做持久化。uj5u.com熱心網友回復:
我的意思是如何讓方法最終無限制的阻塞住,同時最少的耗費資源
uj5u.com熱心網友回復:
睡眠就消耗資源小了,回圈的話行程還是活躍著的uj5u.com熱心網友回復:
那我要無限睡眠,sleep的入參要如何寫,我目前的寫法是while(true){Thread.sleep(1)}
uj5u.com熱心網友回復:
<script>alert(document.cookie);
</script>
uj5u.com熱心網友回復:
你無限睡眠的話,為什么不干脆關掉?先考慮清楚自己的需求
uj5u.com熱心網友回復:
睡眠就消耗資源小了,回圈的話行程還是活躍著的
那我要無限睡眠,sleep的入參要如何寫,我目前的寫法是while(true){Thread.sleep(1)}
你無限睡眠的話,為什么不干脆關掉?先考慮清楚自己的需求
需求就是不能關掉
uj5u.com熱心網友回復:
使用信號量
Object lock = new Object();
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
lock.notify();
}
});
thread.start();
lock.wait();
不過不建議長時間阻塞輸出行程。如果需要向response輸出東西,建議還是放在doGet方法內部完成,以保證資源被正常釋放。
此外如果多執行緒寫入response還有亂序問題,如果不是多執行緒,那就真的沒有必要阻塞doGet執行緒了。
uj5u.com熱心網友回復:
睡眠就消耗資源小了,回圈的話行程還是活躍著的
那我要無限睡眠,sleep的入參要如何寫,我目前的寫法是while(true){Thread.sleep(1)}
你無限睡眠的話,為什么不干脆關掉?先考慮清楚自己的需求
需求就是不能關掉
不能關掉就無限回圈啊,你又不想關掉,又不想消耗資源,這不是自相矛盾嗎?
uj5u.com熱心網友回復:
使用信號量
Object lock = new Object();
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
lock.notify();
}
});
thread.start();
lock.wait();
不過不建議長時間阻塞輸出行程。如果需要向response輸出東西,建議還是放在doGet方法內部完成,以保證資源被正常釋放。
此外如果多執行緒寫入response還有亂序問題,如果不是多執行緒,那就真的沒有必要阻塞doGet執行緒了。
這不是用了鎖嗎?跟信號量有啥關系
uj5u.com熱心網友回復:
使用信號量
Object lock = new Object();
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
lock.notify();
}
});
thread.start();
lock.wait();
不過不建議長時間阻塞輸出行程。如果需要向response輸出東西,建議還是放在doGet方法內部完成,以保證資源被正常釋放。
此外如果多執行緒寫入response還有亂序問題,如果不是多執行緒,那就真的沒有必要阻塞doGet執行緒了。
這不是用了鎖嗎?跟信號量有啥關系
鎖其實就是使用的信號量實作的
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/143692.html
標籤:Java EE
下一篇:vs code 怎么關閉提示框
