我有一個Java程序,當前在高峯時間會凍結。我正在尋找原因。現在,我的想法是,這是因爲某些代碼不是AJAX,所以在高峯時間從服務器請求JSON對象時(在高峯時間上網速度較慢),它會掛在那裏。但我不確定這不是AJAX。我不能在這裏粘貼所有的代碼,因爲它與公司的財產有關,所以我會寫一些代碼/僞代碼。該程序使用以下來執行請求。客戶端從服務器請求JSON時會凍結
URL url = new URL("http://www.xxxxxxxx.com/");
URLConnection conection = url.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(conection .getInputStream()));
String inputLine;
String content = "";
while ((inputLine = in.readLine()) != null) {
content += inputLine;
}
in.close();
json = new JSONObject(content);
上面的代碼是程序的一些片段,我認爲它會導致凍結。我的問題是,這段代碼似乎沒有使用任何AJAX,它不是多線程,對吧?因此,當互聯網連接速度很慢時,它會掛在那裏(凍結)?我對此不是很有經驗。請幫忙。
如果您不認爲這是造成凍結的主要原因,那麼這種問題在一般情況下可能是最可能的原因。 預先感謝您。
編輯/更新:
我的計劃是,在客戶端上運行一個程序搖擺。此應用程序沒有 真實服務器端代碼。 URL地址是一個 第三方服務器,它提供程序 所需的某種數據。我沒有看到該程序使用任何線程。它基本上是核心Java,沒有使用任何線程,我看到,並且我對多線程不是很熟悉,所以我不確定。 (該程序不是由我編寫的,它是由一些前程序員編寫的)這就是爲什麼我正在考慮可能它沒有使用其他線程來運行此服務器請求時。
我的意思是凍結在高峯時段,當UI嘗試運行某些特定功能時,UI將凍結幾秒鐘。我寫的上面的代碼是這些函數的一些片段。 UI凍結一段時間後,其餘部分按預期工作。但是,在非高峯時段,它就像魅力一樣。
具體而言,BufferedReader in = new BufferedReader(new InputStreamReader(conection .getInputStream()));是我認爲導致問題的 。任何人都可以證實嗎?
退房[併發在Swing(http://docs.oracle.com/javase/tutorial/uiswing/concurrency/),您是阻塞事件調度線程,阻止更新用戶界面和響應新事件 – MadProgrammer
它會永久「凍結」嗎?或者它會「凍結」一段時間然後再回來? –
@LeeMeador它凍結了一段時間,並按預期工作 – Joey