马克- to-win:马克 java社区:防盗版实名手机尾号: 73203。
package com;class MulThreMarkToWin extends Thread { Ticket_Opti_MarkToWin ticOpti_MarkToWin;(购买完全教程)}class MulThreMarkToWinBatch extends Thread { Ticket_Opti_MarkToWin ticOpti_MarkToWin;(购买完全教程)}public class TestConcurBuy_MarkToWin { public static void main(String[] args) { Ticket_Opti_MarkToWin ticOpti_MarkToWin=new Ticket_Opti_MarkToWin(); Thread t1 = new MulThreMarkToWin(ticOpti_MarkToWin); Thread t2 = new MulThreMarkToWinBatch(ticOpti_MarkToWin); Thread t3 = new MulThreMarkToWin(ticOpti_MarkToWin); Thread t4 = new MulThreMarkToWin(ticOpti_MarkToWin); t1.start(); t2.start(); t3.start(); t4.start(); }}输出结果是:本来还剩4末了还剩3买一张成功本来还剩3末了还剩2买一张成功还没排队,就创造不足了,以是省韶光了,撤了,买几张失落败本来还剩2末了还剩1买一张成功

输出结果也有可能是:本来还剩4末了还剩1买几张成功本来还剩1末了还剩0买一张成功还没排队,就创造不足了,以是省韶光了,撤了,买一张失落败还没排队,就创造不足了,以是省韶光了,撤了,买一张失落败输出结果也有可能是:本来还剩4末了还剩3买一张成功已经进队等了一会,买几张失落败已经进队等了一会,买一张失落败本来还剩3末了还剩2买一张成功结论:马克-to-win:不论是数据库的select from table for update; 还是我上面低廉甜头的缓存悲观锁,乐不雅观锁的实现,都有个共同的问题:便是它们都是同步要求,都有可能一百万个线程卡在一个点上,去世去世等待,直到超时,想退也退不出来。
select from table for update;是卡在数据库的排他锁上,而我上面低廉甜头的缓存悲观锁乐不雅观锁的实现,是卡在synchronized关键字上。
马克-to-win:那这个问题怎么办理呢?就用我们java部分的线程那儿学的ReentrantLock的lockInterruptibly()方法,这个方法可以办理我们的 Ticket_Pess_MarkToWin悲观锁的问题。
而乐不雅观锁和select for update的问题还得自己手动加行列步队办理。
在线程那章也有论述。
综合起来,

篇幅有限更多请见扩展链接:http://www.mark-to-win.com/tutorial/jsp_7_OptimisticLock.html

jsp线程lock克己乐不雅锁 RESTful API