零、
一、複製myself.indata到myself.outdata
備註out\in
準備中1
準備完畢0
已被消費-1
異常-2
系統初始時,
in=1,out=1
準備中1
禁止複製資料
可以複製資料,
複製後,in=-1,out=0
準備完畢0
禁止複製資料
禁止複製資料,
因為outdata還沒有被next.indata消費
已被消費-1
禁止複製資料
可以複製資料,
複製後,in=-1,out=0
異常-2
禁止複製資料
禁止複製資料
二、 複製pre.outdata到myself.indata
備註in\out
準備中1
準備完畢0
已被消費-1
異常-2
系統初始時,
in=1,out=1
準備中1
禁止複製資料
可以複製資料,
複製後,in=-1,out=0
準備完畢0
禁止複製資料
禁止複製資料,
因為outdata還沒有被next.indata消費
已被消費-1
禁止複製資料
可以複製資料,
複製後,in=-1,out=0
異常-2
禁止複製資料
禁止複製資料
三、正常流程
正常流程
(1)系統初始化時, r.out=1 && t.in=1 && t.out=1 && w.in=1
(2)r從mysql讀取資料,將資料放入r.outdata,並設定r.out=0,那麼 r.out=0 && t.in=1 && t.out=1 && w.in=1
(3)t從r複製資料,將r.outdata複製到t.indata,並設定r.out=-1&&t.in=0,那麼r.out=-1 && t.in=0 && t.out=1 && w.in=1
(4)t將t.indata資料進行計算為newdata,然後將newdata複製到t.outdata,並設定t.in=-1&&t.out=0,那麼r.out=-1 && t.in=-1 && t.out=0 && w.in=1
(5)w從t複製資料,將t.outdata複製到w.indata,並設定t.out=-1&&w.in=0,那麼r.out=-1 && t.in=-1 && t.out=-1 && w.in=0
(6)w將w.indata資料進行計算為newdata,然後將newdata寫入mysql,並設定w.in=-1,那麼r.out=-1 && t.in=-1 && t.out=-1 && w.in=0
r的迴圈流程
r的迴圈流程
(1)獲取r.out狀態
(2.1)r.out=1,代表r.outdata中還沒有資料,然後從mysql讀取資料,然後複製到r.outdata,並設定r.out=0
(2.2)r.out=0,代表r.outdata中資料已經準備完畢,但是還沒有被w消費,禁止從mysql讀取資料
(2.3)r.out=-1,代表r.outdata中資料已經被w消費了,然後從mysql讀取資料,然後複製到r.outdata,並設定r.out=0
t的迴圈流程
t的迴圈流程
(1)獲取t.in狀態
(2.1)t.in=1,代表t.indata還沒有資料,
(2.1.1)判斷r.out=1,代表r.outdata中還沒有資料,禁止後續執行
(2.1.2)判斷r.out=0,代表r.outdata中重新整理了資料,直接將r.outdata複製到t.indata,後續執行(3)
(2.1.2)判斷r.out=-1,代表r.outdata中是老資料,直接將r.outdata複製到t.indata,後續執行(3)
(2.2)t.in=0,代表t.indata中剛剛有資料,後續執行(3)
(2.3)t.in=-1,代表t.indata資料已經被t.outdata消費過了
(2.3.1)判斷r.out=1,代表r.outdata還沒有資料,禁止後續執行
(2.3.2)判斷r.out=0,代表r.outdata重新整理了,直接將r.outdata複製到t.indata,後續執行(3)
(2.3.3)判斷r.out=-1,代表r.outdata是老資料,禁止後續執行
(3)將t.indata取出來,並轉化為newdata,後續執行(4)
(4)獲取t.out狀態
(4.1)t.out=1,代表t.outdata還沒有資料,直接將newdata複製到t.outdata
(4.2)t.out=0,代表t.outdata中資料還沒有被w消費,禁止後續執行
(4.3)t.out=-1,代表t.outdata中資料已經被w.indata消費過了
(4.3.1)判斷t.in=1,代表t.indata還沒有資料,執行(2.1),然後直接將newdata複製到t.outdata
(4.3.2)判斷t.in=0,代表t.indata是重新整理的資料,直接將newdata複製到t.outdata
(4.3.3)判斷t.in=-1,代表t.indata是老資料,禁止後續執行
w的迴圈流程
w的迴圈流程
(1)獲取w.in狀態
(2.1)w.in=1,代表t.indata資料還沒有準備完畢
(2.1.1)判斷t.out=1,代表t.outdata沒有資料,禁止後續執行
(2.1.2)判斷t.out=0,代表t.outdata更新了資料,直接複製t.outdata到w.indata,後續執行(3)
(2.1.3)判斷t.out=-1,代表t.outdata的資料是老資料,直接複製t.outdata到w.indata,後續執行(3)
(2.2)w.in=0,代表t.indata準備好了,還沒有被消費,後續執行(3)
(2.3)w.in=-1,代表t.indata已經被消費過了
(2.3.1)判斷t.out=1,代表t.outdata沒有資料,禁止後續執行
(2.3.2)判斷t.out=0,代表t.outdata更新了資料,後續執行(3)
(2.3.2)判斷t.out=-1,代表t.outdata的資料是老資料,禁止後續執行
(3)將w.indata的資料存放到mysql
w的迴圈流程的補充1
w的迴圈流程的補充1
當w.in=1,代表w.indata.t1.outdata已經複製成功了,但是w.indata.t2.outdata還沒有複製成功。
我們去判斷t2.out:
如果t2.out=1,代表t2.outdata還沒有準備完畢,w需要阻塞
如果t2.out=0,代表t2.outdata準備完畢了,將t2.outdata複製到w.indata.t2.outdata,繼續執行
如果t2.out=-1,代表t2.outdata是老資料,將t2.outdata複製到w.indata.t2.outdata,繼續執行
w的迴圈流程的補充2
w的迴圈流程的補充2
w.in=-1,代表t.indata已經被消費過了,代表w.indata.t1.outdata已經複製成功了,代表w.indata.t1.outdata已經複製成功了
我們去判斷tx.out,
如果任何乙個tx.out=0,代表tx.outdata準備完畢了,則將tx.outdata複製到w.indata,然後繼續執行
如果所有的tx.out=-1,代表tx.outdata都是老資料,阻塞執行
轉換流 緩衝流
輸入 輸出流體系中提供了兩個轉換流,這兩個轉換流用於實現將位元組流轉換為字元流。1.1outputstreamwriter outputstreamwriter 是字元流通向位元組流的橋梁 可使用指定的字元編碼表,將要寫入流中的字元編碼成位元組。它的作用的就是,將字串按照指定的編碼表轉成位元組,在使...
I O流(轉換流)
轉換流其實聽名字就不是很難理解 比如位元組流轉字元流 這裡我就不再演示輸出結果了,這一篇部落格我沒有驗證我寫的 不過一般是沒有多大問題的,就算有自己花點時間除錯一下就好了,不要太懶。還有就是記得包含上指定的包,要不然肯定會報錯的。這裡建議大家還是不要偷懶自己弄幾個檔案敲一下 執行下。這裡我們可能只會...
轉換流,Properties 集合
轉換流 outputstreamwriter 寫入轉碼 字元流通向位元組流的橋梁,可使用指定的字元編碼表,將要寫入流中的字元編碼成位元組。格式 明確目的地 fileoutputstream fos newfileoutputstream d text c.txt true outputstreamw...