我的多線程————讀取百萬條Excel數據,寫入到數據庫
問題拆解:1.如何讀取百萬條Excel數據?poi用戶模式會出現內存溢出啊
2.讀取到的Excel數據存儲在哪裏?100萬條數據放在內存不是一件很恐怖的事情嗎?
3.如何高效的將數據寫入到數據庫?多線程如何使用?
方案1:poi的命令觸發模式解決讀取的時候內存溢出問題、讀取到的數據放到內存中、內存中通過forkjoin工具任務拆解,加入到隊列
深入思考:1》每次都要等待讀取完數據,才能進行其他操作,讀取本身就花費了9秒時間 2》100萬條數據很消耗內存啊
方案2:分2個線程:線程A和線程B,線程A負責讀取Excel數據,線程B負責寫入到數據庫,線程A和線程B如何配合工作呢?多線程的生產消費者模式
最終核心代碼附上:
poi工具類代碼:
讀請求使用的是poi的命令模式,讀取只負責向list中添加數據,無上限
生產消費模式的核心代碼
使用線程的工廠模式,將寫請求加入到隊列
隊列中,不斷拿取寫請求,執行
寫請求最終的執行方法
溫馨提示:數據庫的操作可以使用批處理
我的多線程————讀取百萬條Excel數據,寫入到數據庫
相關推薦
我的多線程————讀取百萬條Excel數據,寫入到數據庫
多線程 讀取Excel 寫入到數據庫 問題:如何高效的讀取百萬條Excel數據到數據庫?問題拆解:1.如何讀取百萬條Excel數據?poi用戶模式會出現內存溢出啊 2.讀取到的Excel數據存儲在哪裏?100萬條數據放在內存不是一件很恐怖的事情嗎?
【轉載】JAVA多線程讀取、操作List集合
線程 nbsp static 一點 stat lang 素數 param 應用 本文轉載自:http://blog.csdn.net/wang1989cs/article/details/47663565 import java.util.ArrayList; impor
多線程中sleep和wait的區別,以及多線程的實現方式及原因,定時器--Timer
守護 驗證 取消 技術 方法 代碼 安全 接口 art 1. Java中sleep和wait的區別 ① 這兩個方法來自不同的類分別是,sleep來自Thread類,和wait來自Object類。 sleep是Thread的靜態類方法,誰調用的誰去睡覺,即使在a線程裏調用b
Java學習筆記—多線程(java.util.concurrent.locks包,轉載)
www 直接 一定的 比較 得到 非公平鎖 關於 無法 returns 一.synchronized的缺陷 synchronized是java中的一個關鍵字,也就是說是Java語言內置的特性。那麽為什麽會出現Lock呢? 如果一個代碼塊被synchronized修飾
Java多線程並發鎖和原子操作,你真的了解嗎?
我想 將不 實驗 jdk1 一段 前言 並發 alt 一個 前言 對於Java多線程,接觸最多的莫過於使用synchronized,這個簡單易懂,但是這synchronized並非性能最優的。今天我就簡單介紹一下幾種鎖。可能我下面講的
在多線程中顯示模態窗口,出現異常現象
按鈕 找到 關閉 什麽 () 點擊沒反應 mes 直接 消息 無意間發現如果在多線程中顯示模態窗口後,當這個模態窗口關閉後,原來的主窗口無法再次響應鼠標事件了。 就是窗口上的按鈕用鼠標點擊沒反應,整個窗口看上去像是禁用的狀態。 具體原因到現在沒找到。 最後的解決辦法: 在多
Java多線程和並發(四),線程返回值獲取方式和Callable接口
current tst tar cal rup thread 線程等待 lease sub 目錄 1.主線程等待法 2.使用Thread類的join()阻塞當前線程,等待子線程執行完畢 3.通過Callable接口實現:通過FutureTask Or線程池獲取 四、線程返回
Java多線程和並發(九),ReentrantLock(公平鎖)
code rtl cat read thread ron true sta 目錄 目錄 1.ReentrantLock 2.ReentrantLock的實現 3.synchronized和ReentrantLock的區別 九、ReentrantLock(公平鎖) 1.Ree
Java多線程和並發(二),Thread中的start和run的區別
() main alt exception adt 方法 的區別 @override att 目錄 1.調用run方法 2.調用start方法 3.start和run的區別 二、Thread中的start和run的區別 1.調用run方法 public class Thr
Java多線程和並發(一),進程與線程的區別
img 分享 com image font str src spa .com 目錄 1.進程和線程的由來 2.進程和線程的定義 3.進程和線程的區別 一、進程和線程的區別 1.進程和線程的由來 2.進程和線程的定義 進程是資源分配的最小單位,線程是CPU調度的最
Java多線程和並發(三),Thread類和Runnable接口
ble thread cal ima spa ont 目錄 span 分享 目錄 1.Thread和Runnable接口 三、Thread類和Runnable接口 1.Thread和Runnable接口 Java多線程和並發(三),Thread類和Runnable
Java多線程和並發(八),synchronized底層原理
圖片 同步 ont 目錄 public java多線 println 自旋 編譯 目錄 1.對象頭(Mark Word) 2.對象自帶的鎖(Monitor) 3.自旋鎖和自適應自旋鎖 4.偏向鎖 5.輕量級鎖 6.偏向鎖,輕量級鎖,重量級鎖聯系 八、synchronized
Java多線程和並發(六),yield函數和中斷線程
(六) style image ron 多線程 alt inf 中斷線程 並發 目錄 1.yield函數 2.中斷線程 六、yield函數和中斷線程 1.yield函數 2.中斷線程 (1)已經被拋棄的方法 (2)目前使用的方法 Java多線程和並發(六),yiel
Java多線程和並發(五),線程的狀態
font lis ont 等待 strong info 目錄 list 線程的狀態 目錄 1.線程的六個狀態 2.sleep和wait的區別 3.鎖池(EntryList)和等待池(WaitSet) 4.notify和notifyall的區別 五、線程的狀態 1.線程的六個
java多線程批量讀取文件(七)
object pack execute st3 mem cut eureka rgs ring 新公司入職一個多月了,至今沒有事情可以做,十來個新同事都一樣抓狂,所以大家都自己學習一些新東西,我最近在看zookeeper,感覺蠻不錯的,和微服務的zuul以及eureka功能
跟我學Java多線程——線程池與堵塞隊列
信號 線程的創建 margin cit rect weight offer 成功 rain 前言 上一篇文章中我們將ThreadPoolExecutor進行了深入的學習和介紹,實際上我們在項目中應用的時候非常少有直接應用ThreadPoolExecutor來
多線程下不反復讀取SQL Server 表的數據
identity -- not 能力 get sof net rgb 故障 在進行一些如發送短信、郵件的業務時,我們常常會使用一個表來存儲待發送的數據,由後臺多個線程不斷的從表中讀取待發送的數據進行發送,發送完畢後再將數據轉移到歷史表中,這樣保證待發送表的數據普通情況下不
我的多線程-多線程必知的N個常識
多線程 常識 N個問題 多線程的基礎知識有哪些?一根線:正在執行的程序主體只有一個多線程實例:GUI應用程序(查找和執行操作並行),耗時間的io操作,多個客戶端一個服務器,什麽是 順序、並行、並發。 什麽是並發順序、什麽是並發並行?程序何時終止?睡著的線程如何被喚醒?什麽是線程的互斥?什麽是
我的多線程—多線程與設計模式閱讀筆記
圖解java多線程與設計模式 多線程 設計模式 java多線程與設計模式1.Producer-Consumer模式 我來做,你來用 命名生產消費者模式. 生產者和消費者只有一個成為Pipe模式如何解決兩者之間處理速度差異的問題? data
Python實現下載界面(帶進度條,斷點續傳,多線程多任務下載等)
Python 下載界面 tkinter 斷點續傳 進度條 開發環境: Windows 7 64位,Python 3.6.2 實現功能: 進度條,下載速度和下載進度的顯示,斷點續傳(暫停繼續下載功能),取消下載等功能下載界面,如圖所示點擊‘新建任務‘,彈出輸入下載鏈接的窗口,如圖所示點擊‘開