⑴ java兩個線程分別返回兩個ResultSet,如何分多次讀取兩個ResultSet的結果
創建實體
ResultBean
private RsultSet resultSet;
private List<Bean> resultList;
包含方法:
方法1:public List<Bean> getResultList();每次將resultList清空後使用resultSet.next讀取Bean再添加,判斷是否遍歷完畢,遍歷完畢調用closeResultSet方法並返回null
方法2:public void closeResultSet();關閉ResultSet
2.建立一個單例工具類ResultUtil,包含以下私有成員
private Map<用戶操作標識,ResultBean> resultMap;
用戶操作標識每次進入頁面時隨機生成一個且不可重復,後續點擊載入都是使用頁面初始化時使用的用戶操作標識
方法1:public void pushResultBean(String 用戶操作標識,ResultBean resultBean) ;添加ResultBean到resultMap中,key為用戶操作標識;
方法2: public ResultBean getResultBean(String 用戶操作標識) 根據用戶操作標識取得ResultBean;
方法 3:public void removeResultBean(String 用戶操作標識);通過用戶操作標識remove
3.介面層
通過用戶標識調用單例工具類的ResultUtil.getResultBean方法,通過得到的ResultBean再調用getResultList方法,當getResultList方法返回結果為空將調用ResultUtil.removeResultBean方法
4.前端
每次通過用戶操作標識請求介面,得到響應結果追加即可
機優化方案:還需要ResultUtil中的resultMap回收,可以考慮使用websoket,或者心跳機制,想簡單的話先用心跳機制解決,單獨開一個介面,前端定時調用,如果超過三十秒該用戶操作標識沒有心跳檢測調用ResultUtil.removeResultBean方法,若是用戶體量大的話考慮使用netty
⑵ JAVA多線程有哪幾種實現方式
JAVA多線程實現方式主要有三種:繼承Thread類、實現Runnable介面、使用ExecutorService、Callable、Future實現有返回結果的多線程。其中前兩種方式線程執行完後都沒有返回值,只有最後一種是帶返回值的。
1、繼承Thread類實現多線程
繼承Thread類的方法盡管被我列為一種多線程實現方式,但Thread本質上也是實現了Runnable介面的一個實例,它代表一個線程的實例,並且,啟動線程的唯一方法就是通過Thread類的start()實例方法。start()方法是一個native方法,它將啟動一個新線程,並執行run()方法。這種方式實現多線程很簡單,通過自己的類直接extend Thread,並復寫run()方法,就可以啟動新線程並執行自己定義的run()方法。例如:
[java]view plain
{
publicvoidrun(){
System.out.println("MyThread.run()");
}
}
[java]view plain
MyThreadmyThread1=newMyThread();
MyThreadmyThread2=newMyThread();
myThread1.start();
myThread2.start();
[java]view plain
{
publicvoidrun(){
System.out.println("MyThread.run()");
}
}
[java]view plain
MyThreadmyThread=newMyThread();
Threadthread=newThread(myThread);
thread.start();
[java]view plain
publicvoidrun(){
if(target!=null){
target.run();
}
}
⑶ java多線程的問題為何輸出結果只有一個
1、主要是tt.join的問題。
2、當子線程開啟後,主線程和子線程是並發或並行執行的,會多線程輸出。
但是tt.join是指將tt線程與主線程(即tt.join這段代碼所運行時候的線程)合並,即等tt.join運行完後執行剛剛的主線程。
而你的tt線程中的run()方法為:while(true)所以tt.join之後,tt一直在運行,
故只能看一個線程在運行。
希望能解決你的問題。