改了一下實(shí)現(xiàn),采用“生產(chǎn)者-消費(fèi)者”模式。每個(gè)串口一個(gè)線程,讀取BlockingQueue里的待發(fā)信息,作為消費(fèi)者,發(fā)送完畢后把發(fā)送結(jié)果寫到另外一個(gè)BlockingQueue里;查詢線程定時(shí)查詢數(shù)據(jù)庫,獲得待發(fā)信息并加入到BlockingQueue里;結(jié)果更新線程讀取BlockingQueue里的短信發(fā)送結(jié)果,更新到數(shù)據(jù)庫里,并把結(jié)果發(fā)送到客戶端。
這樣會(huì)帶來一個(gè)問題,發(fā)送線程發(fā)送短信需要一定的時(shí)間,可能某條待發(fā)信息已經(jīng)在隊(duì)列里了,但查詢線程并不知道,繼續(xù)把該信息入列,所以發(fā)送線程在發(fā)送某條短信前要檢查數(shù)據(jù)庫,看是否已經(jīng)發(fā)送過,如果發(fā)送過,則不再發(fā)送。
這樣會(huì)帶來一個(gè)問題,發(fā)送線程發(fā)送短信需要一定的時(shí)間,可能某條待發(fā)信息已經(jīng)在隊(duì)列里了,但查詢線程并不知道,繼續(xù)把該信息入列,所以發(fā)送線程在發(fā)送某條短信前要檢查數(shù)據(jù)庫,看是否已經(jīng)發(fā)送過,如果發(fā)送過,則不再發(fā)送。