訂票系統(tǒng)差不多是我們最熟悉的一個(gè)關(guān)于線程并發(fā)的問題,如何做到多個(gè)售票窗口同時(shí)售票而不會(huì)導(dǎo)致將同一張票賣給多個(gè)旅客,首先很直觀 的一點(diǎn)就是當(dāng)我們把售票余量的增減弄成一個(gè)事務(wù),如此一來在增減票余量的代碼執(zhí)行的時(shí)候只能允許一個(gè)線程操作也就是出票只能是總部出票,那么一個(gè)簡(jiǎn)易的模型就出來了。

  首先所有車票(虛擬票使用票號(hào)代替)都存放在總部,在總部只需完成接收售票點(diǎn)的出票請(qǐng)求來完成增減票余量并產(chǎn)生唯一票號(hào)分發(fā)給售票點(diǎn),然后各售票點(diǎn)將票賣給旅客(所以這個(gè)模型的通俗的理解就是各個(gè)售票點(diǎn)代替旅客去售票總部排隊(duì)申請(qǐng)出票,這樣就不會(huì)出現(xiàn)同一張票賣給多個(gè)旅客),這也就是同步與互斥的一個(gè)案例吧。

  這里講解一個(gè)使用Java實(shí)現(xiàn)這個(gè)案例的代碼吧

  很明顯這里各個(gè)售票點(diǎn)銷售的都是售票總部的票余量,所以各個(gè)售票點(diǎn)需要共享票余量這個(gè)變量。因而我們可以創(chuàng)建一個(gè)售票窗口類

  

網(wǎng)友評(píng)論

<thead id="mkhx7"><legend id="mkhx7"></legend></thead>
      <thead id="mkhx7"><s id="mkhx7"></s></thead>