多线程状态下的安全问题是怎么解决的?

在多线程状态下,如果同时对一个共享变量进行操作,那么很可能会出现安全问题,比如最常见的买票问题:

先创建一个售票的线程类:

/**
 * 售票站点
 */
public class Station extends Thread {

    /**
     * 创建一个共享变量,记录当前剩余车票的数量
     */
    public static int count = 50;

    @Override
    public void run() {
        while(count > 0){
            System.out.println("序号为" + count + "的票被站点" + Thread.currentThread().getName() + "出售成功");
            count--;
        }
    }
}

创建3个线程同时卖票:

public class StationTest {

    public static void main(String[] args) {
        Station station1 = new Station();
        Station station2 = new Station();
        Station station3 = new Station();

        station1.start();
        station2.start();
        station3.start();
    }
}

输出结果如下:

序号为50的票被站点Thread-1出售成功
序号为50的票被站点Thread-2出售成功
序号为48的票被站点Thread-2出售成功
序号为50的票被站点Thread-0出售成功
序号为47的票被站点Thread-2出售成功
序号为49的票被站点Thread-1出售成功
序号为45的票被站点Thread-2出售成功
序号为46的票被站点Thread-0出售成功
序号为43的票被站点Thread-2出售成功
序号为44的票被站点Thread-1出售成功
序号为41的票被站点Thread-2出售成功
序号为42的票被站点Thread-0出售成功
序号为39的票被站点Thread-2出售成功
序号为40的票被站点Thread-1出售成功
序号为37的票被站点Thread-2出售成功
序号为38的票被站点Thread-0出售成功
序号为35的票被站点Thread-2出售成功
序号为36的票被站点Thread-1出售成功
序号为33的票被站点Thread-2出售成功
序号为34的票被站点Thread-0出售成功
序号为31的票被站点Thread-2出售成功
序号为32的票被站点Thread-1出售成功
序号为29的票被站点Thread-2出售成功
序号为30的票被站点Thread-0出售成功
序号为27的票被站点Thread-2出售成功
序号为28的票被站点Thread-1出售成功
序号为25的票被站点Thread-2出售成功
序号为26的票被站点Thread-0出售成功
序号为23的票被站点Thread-2出售成功
序号为24的票被站点Thread-1出售成功
序号为21的票被站点Thread-2出售成功
序号为22的票被站点Thread-0出售成功
序号为19的票被站点Thread-2出售成功
序号为20的票被站点Thread-1出售成功
序号为17的票被站点Thread-2出售成功
序号为18的票被站点Thread-0出售成功
序号为15的票被站点Thread-2出售成功
序号为16的票被站点Thread-1出售成功
序号为13的票被站点Thread-2出售成功
序号为14的票被站点Thread-0出售成功
序号为11的票被站点Thread-2出售成功
序号为12的票被站点Thread-1出售成功
序号为9的票被站点Thread-2出售成功
序号为10的票被站点Thread-0出售成功
序号为7的票被站点Thread-2出售成功
序号为8的票被站点Thread-1出售成功
序号为5的票被站点Thread-2出售成功
序号为6的票被站点Thread-0出售成功
序号为3的票被站点Thread-2出售成功
序号为4的票被站点Thread-1出售成功
序号为1的票被站点Thread-2出售成功
序号为2的票被站点Thread-0出售成功

Process finished with exit code 0

细心的朋友发现了,序号为50的票居然被卖了3次???那岂不是3个买票的人要打起来了。而且这还是只有3个站点售票的情况,如果售票的站点更多,岂不是会更加容易出错?这是因为创建的线程同时访问计数器,可能会导致计数器不一致,还有一些问题这里并没有体现出来,比如说序号为0的票也被卖了出去,或者大家都在抢同一张票,谁也不放手,导致出现死锁。这就是典型的卖票问题。那么我们应该怎么避免这种情况呢?

下面讲解一下如何使用同步机制来解决这个问题。

java中有一个关键字:synchronized用于实现同步机制,比如同步代码块或者同步方法

同步代码块

先看看同步代码块的写法:

/**
 * 售票站点
 */
public class NewStation extends Thread {

    /**
     * 创建一个共享变量,记录当前剩余车票的数量
     */
    public static int count = 500;

    @Override
    public void run() {
        while (count > 0) {
            // 使用同步代码块
            synchronized (NewStation.class) {
                if (count > 0) {
                    System.out.println("序号为" + count + "的票被站点" + Thread.currentThread().getName() + "出售成功");
                    count--;
                }
            }
        }
    }
}

测试代码同样是创建3个线程:

public class NewStationTest {

    public static void main(String[] args) {
        NewStation station1 = new NewStation();
        NewStation station2 = new NewStation();
        NewStation station3 = new NewStation();

        station1.start();
        station2.start();
        station3.start();
    }
}

输出结果如下:(输出太快导致同一个站点很快把票卖完了,为了体现出不同的站点同时卖票,我把50张改成了500张)

序号为500的票被站点Thread-0出售成功
序号为499的票被站点Thread-0出售成功
序号为498的票被站点Thread-0出售成功
序号为497的票被站点Thread-0出售成功
序号为496的票被站点Thread-0出售成功
序号为495的票被站点Thread-0出售成功
序号为494的票被站点Thread-0出售成功
序号为493的票被站点Thread-0出售成功
序号为492的票被站点Thread-0出售成功
序号为491的票被站点Thread-0出售成功
序号为490的票被站点Thread-0出售成功
序号为489的票被站点Thread-0出售成功
序号为488的票被站点Thread-0出售成功
序号为487的票被站点Thread-0出售成功
序号为486的票被站点Thread-0出售成功
序号为485的票被站点Thread-0出售成功
序号为484的票被站点Thread-0出售成功
序号为483的票被站点Thread-0出售成功
序号为482的票被站点Thread-0出售成功
序号为481的票被站点Thread-0出售成功
序号为480的票被站点Thread-0出售成功
序号为479的票被站点Thread-0出售成功
序号为478的票被站点Thread-0出售成功
序号为477的票被站点Thread-0出售成功
序号为476的票被站点Thread-0出售成功
序号为475的票被站点Thread-0出售成功
序号为474的票被站点Thread-0出售成功
序号为473的票被站点Thread-0出售成功
序号为472的票被站点Thread-0出售成功
序号为471的票被站点Thread-0出售成功
序号为470的票被站点Thread-0出售成功
序号为469的票被站点Thread-0出售成功
序号为468的票被站点Thread-0出售成功
序号为467的票被站点Thread-0出售成功
序号为466的票被站点Thread-0出售成功
序号为465的票被站点Thread-0出售成功
序号为464的票被站点Thread-0出售成功
序号为463的票被站点Thread-0出售成功
序号为462的票被站点Thread-0出售成功
序号为461的票被站点Thread-0出售成功
序号为460的票被站点Thread-0出售成功
序号为459的票被站点Thread-0出售成功
序号为458的票被站点Thread-0出售成功
序号为457的票被站点Thread-0出售成功
序号为456的票被站点Thread-0出售成功
序号为455的票被站点Thread-0出售成功
序号为454的票被站点Thread-0出售成功
序号为453的票被站点Thread-0出售成功
序号为452的票被站点Thread-0出售成功
序号为451的票被站点Thread-0出售成功
序号为450的票被站点Thread-0出售成功
序号为449的票被站点Thread-0出售成功
序号为448的票被站点Thread-0出售成功
序号为447的票被站点Thread-0出售成功
序号为446的票被站点Thread-0出售成功
序号为445的票被站点Thread-0出售成功
序号为444的票被站点Thread-0出售成功
序号为443的票被站点Thread-0出售成功
序号为442的票被站点Thread-0出售成功
序号为441的票被站点Thread-0出售成功
序号为440的票被站点Thread-0出售成功
序号为439的票被站点Thread-0出售成功
序号为438的票被站点Thread-0出售成功
序号为437的票被站点Thread-0出售成功
序号为436的票被站点Thread-0出售成功
序号为435的票被站点Thread-0出售成功
序号为434的票被站点Thread-0出售成功
序号为433的票被站点Thread-0出售成功
序号为432的票被站点Thread-0出售成功
序号为431的票被站点Thread-0出售成功
序号为430的票被站点Thread-0出售成功
序号为429的票被站点Thread-0出售成功
序号为428的票被站点Thread-0出售成功
序号为427的票被站点Thread-0出售成功
序号为426的票被站点Thread-0出售成功
序号为425的票被站点Thread-0出售成功
序号为424的票被站点Thread-0出售成功
序号为423的票被站点Thread-0出售成功
序号为422的票被站点Thread-0出售成功
序号为421的票被站点Thread-0出售成功
序号为420的票被站点Thread-0出售成功
序号为419的票被站点Thread-0出售成功
序号为418的票被站点Thread-0出售成功
序号为417的票被站点Thread-0出售成功
序号为416的票被站点Thread-0出售成功
序号为415的票被站点Thread-0出售成功
序号为414的票被站点Thread-0出售成功
序号为413的票被站点Thread-0出售成功
序号为412的票被站点Thread-0出售成功
序号为411的票被站点Thread-0出售成功
序号为410的票被站点Thread-0出售成功
序号为409的票被站点Thread-0出售成功
序号为408的票被站点Thread-0出售成功
序号为407的票被站点Thread-0出售成功
序号为406的票被站点Thread-0出售成功
序号为405的票被站点Thread-0出售成功
序号为404的票被站点Thread-0出售成功
序号为403的票被站点Thread-0出售成功
序号为402的票被站点Thread-0出售成功
序号为401的票被站点Thread-0出售成功
序号为400的票被站点Thread-0出售成功
序号为399的票被站点Thread-0出售成功
序号为398的票被站点Thread-0出售成功
序号为397的票被站点Thread-0出售成功
序号为396的票被站点Thread-0出售成功
序号为395的票被站点Thread-0出售成功
序号为394的票被站点Thread-0出售成功
序号为393的票被站点Thread-0出售成功
序号为392的票被站点Thread-0出售成功
序号为391的票被站点Thread-0出售成功
序号为390的票被站点Thread-0出售成功
序号为389的票被站点Thread-0出售成功
序号为388的票被站点Thread-0出售成功
序号为387的票被站点Thread-0出售成功
序号为386的票被站点Thread-0出售成功
序号为385的票被站点Thread-0出售成功
序号为384的票被站点Thread-0出售成功
序号为383的票被站点Thread-0出售成功
序号为382的票被站点Thread-0出售成功
序号为381的票被站点Thread-0出售成功
序号为380的票被站点Thread-0出售成功
序号为379的票被站点Thread-0出售成功
序号为378的票被站点Thread-0出售成功
序号为377的票被站点Thread-0出售成功
序号为376的票被站点Thread-0出售成功
序号为375的票被站点Thread-0出售成功
序号为374的票被站点Thread-0出售成功
序号为373的票被站点Thread-0出售成功
序号为372的票被站点Thread-0出售成功
序号为371的票被站点Thread-0出售成功
序号为370的票被站点Thread-0出售成功
序号为369的票被站点Thread-0出售成功
序号为368的票被站点Thread-0出售成功
序号为367的票被站点Thread-0出售成功
序号为366的票被站点Thread-0出售成功
序号为365的票被站点Thread-0出售成功
序号为364的票被站点Thread-0出售成功
序号为363的票被站点Thread-0出售成功
序号为362的票被站点Thread-0出售成功
序号为361的票被站点Thread-0出售成功
序号为360的票被站点Thread-0出售成功
序号为359的票被站点Thread-0出售成功
序号为358的票被站点Thread-0出售成功
序号为357的票被站点Thread-0出售成功
序号为356的票被站点Thread-0出售成功
序号为355的票被站点Thread-0出售成功
序号为354的票被站点Thread-0出售成功
序号为353的票被站点Thread-0出售成功
序号为352的票被站点Thread-0出售成功
序号为351的票被站点Thread-0出售成功
序号为350的票被站点Thread-0出售成功
序号为349的票被站点Thread-0出售成功
序号为348的票被站点Thread-0出售成功
序号为347的票被站点Thread-0出售成功
序号为346的票被站点Thread-0出售成功
序号为345的票被站点Thread-0出售成功
序号为344的票被站点Thread-0出售成功
序号为343的票被站点Thread-0出售成功
序号为342的票被站点Thread-0出售成功
序号为341的票被站点Thread-0出售成功
序号为340的票被站点Thread-0出售成功
序号为339的票被站点Thread-0出售成功
序号为338的票被站点Thread-0出售成功
序号为337的票被站点Thread-0出售成功
序号为336的票被站点Thread-0出售成功
序号为335的票被站点Thread-0出售成功
序号为334的票被站点Thread-0出售成功
序号为333的票被站点Thread-0出售成功
序号为332的票被站点Thread-0出售成功
序号为331的票被站点Thread-0出售成功
序号为330的票被站点Thread-0出售成功
序号为329的票被站点Thread-0出售成功
序号为328的票被站点Thread-0出售成功
序号为327的票被站点Thread-0出售成功
序号为326的票被站点Thread-0出售成功
序号为325的票被站点Thread-0出售成功
序号为324的票被站点Thread-0出售成功
序号为323的票被站点Thread-0出售成功
序号为322的票被站点Thread-0出售成功
序号为321的票被站点Thread-0出售成功
序号为320的票被站点Thread-0出售成功
序号为319的票被站点Thread-0出售成功
序号为318的票被站点Thread-0出售成功
序号为317的票被站点Thread-0出售成功
序号为316的票被站点Thread-0出售成功
序号为315的票被站点Thread-0出售成功
序号为314的票被站点Thread-0出售成功
序号为313的票被站点Thread-0出售成功
序号为312的票被站点Thread-0出售成功
序号为311的票被站点Thread-0出售成功
序号为310的票被站点Thread-0出售成功
序号为309的票被站点Thread-0出售成功
序号为308的票被站点Thread-0出售成功
序号为307的票被站点Thread-0出售成功
序号为306的票被站点Thread-0出售成功
序号为305的票被站点Thread-0出售成功
序号为304的票被站点Thread-0出售成功
序号为303的票被站点Thread-0出售成功
序号为302的票被站点Thread-0出售成功
序号为301的票被站点Thread-0出售成功
序号为300的票被站点Thread-0出售成功
序号为299的票被站点Thread-0出售成功
序号为298的票被站点Thread-0出售成功
序号为297的票被站点Thread-0出售成功
序号为296的票被站点Thread-0出售成功
序号为295的票被站点Thread-0出售成功
序号为294的票被站点Thread-0出售成功
序号为293的票被站点Thread-0出售成功
序号为292的票被站点Thread-0出售成功
序号为291的票被站点Thread-0出售成功
序号为290的票被站点Thread-0出售成功
序号为289的票被站点Thread-0出售成功
序号为288的票被站点Thread-0出售成功
序号为287的票被站点Thread-0出售成功
序号为286的票被站点Thread-0出售成功
序号为285的票被站点Thread-0出售成功
序号为284的票被站点Thread-0出售成功
序号为283的票被站点Thread-0出售成功
序号为282的票被站点Thread-0出售成功
序号为281的票被站点Thread-0出售成功
序号为280的票被站点Thread-0出售成功
序号为279的票被站点Thread-0出售成功
序号为278的票被站点Thread-0出售成功
序号为277的票被站点Thread-0出售成功
序号为276的票被站点Thread-0出售成功
序号为275的票被站点Thread-0出售成功
序号为274的票被站点Thread-0出售成功
序号为273的票被站点Thread-0出售成功
序号为272的票被站点Thread-0出售成功
序号为271的票被站点Thread-0出售成功
序号为270的票被站点Thread-0出售成功
序号为269的票被站点Thread-0出售成功
序号为268的票被站点Thread-0出售成功
序号为267的票被站点Thread-0出售成功
序号为266的票被站点Thread-0出售成功
序号为265的票被站点Thread-0出售成功
序号为264的票被站点Thread-0出售成功
序号为263的票被站点Thread-0出售成功
序号为262的票被站点Thread-0出售成功
序号为261的票被站点Thread-0出售成功
序号为260的票被站点Thread-0出售成功
序号为259的票被站点Thread-0出售成功
序号为258的票被站点Thread-0出售成功
序号为257的票被站点Thread-0出售成功
序号为256的票被站点Thread-0出售成功
序号为255的票被站点Thread-0出售成功
序号为254的票被站点Thread-0出售成功
序号为253的票被站点Thread-0出售成功
序号为252的票被站点Thread-0出售成功
序号为251的票被站点Thread-0出售成功
序号为250的票被站点Thread-0出售成功
序号为249的票被站点Thread-0出售成功
序号为248的票被站点Thread-0出售成功
序号为247的票被站点Thread-0出售成功
序号为246的票被站点Thread-0出售成功
序号为245的票被站点Thread-0出售成功
序号为244的票被站点Thread-0出售成功
序号为243的票被站点Thread-0出售成功
序号为242的票被站点Thread-0出售成功
序号为241的票被站点Thread-0出售成功
序号为240的票被站点Thread-0出售成功
序号为239的票被站点Thread-0出售成功
序号为238的票被站点Thread-2出售成功
序号为237的票被站点Thread-2出售成功
序号为236的票被站点Thread-2出售成功
序号为235的票被站点Thread-2出售成功
序号为234的票被站点Thread-2出售成功
序号为233的票被站点Thread-2出售成功
序号为232的票被站点Thread-2出售成功
序号为231的票被站点Thread-2出售成功
序号为230的票被站点Thread-2出售成功
序号为229的票被站点Thread-2出售成功
序号为228的票被站点Thread-2出售成功
序号为227的票被站点Thread-2出售成功
序号为226的票被站点Thread-2出售成功
序号为225的票被站点Thread-2出售成功
序号为224的票被站点Thread-2出售成功
序号为223的票被站点Thread-2出售成功
序号为222的票被站点Thread-2出售成功
序号为221的票被站点Thread-2出售成功
序号为220的票被站点Thread-2出售成功
序号为219的票被站点Thread-2出售成功
序号为218的票被站点Thread-2出售成功
序号为217的票被站点Thread-2出售成功
序号为216的票被站点Thread-2出售成功
序号为215的票被站点Thread-2出售成功
序号为214的票被站点Thread-2出售成功
序号为213的票被站点Thread-2出售成功
序号为212的票被站点Thread-2出售成功
序号为211的票被站点Thread-2出售成功
序号为210的票被站点Thread-2出售成功
序号为209的票被站点Thread-2出售成功
序号为208的票被站点Thread-2出售成功
序号为207的票被站点Thread-2出售成功
序号为206的票被站点Thread-2出售成功
序号为205的票被站点Thread-2出售成功
序号为204的票被站点Thread-2出售成功
序号为203的票被站点Thread-2出售成功
序号为202的票被站点Thread-2出售成功
序号为201的票被站点Thread-2出售成功
序号为200的票被站点Thread-2出售成功
序号为199的票被站点Thread-2出售成功
序号为198的票被站点Thread-2出售成功
序号为197的票被站点Thread-2出售成功
序号为196的票被站点Thread-2出售成功
序号为195的票被站点Thread-2出售成功
序号为194的票被站点Thread-2出售成功
序号为193的票被站点Thread-2出售成功
序号为192的票被站点Thread-2出售成功
序号为191的票被站点Thread-2出售成功
序号为190的票被站点Thread-2出售成功
序号为189的票被站点Thread-2出售成功
序号为188的票被站点Thread-2出售成功
序号为187的票被站点Thread-2出售成功
序号为186的票被站点Thread-2出售成功
序号为185的票被站点Thread-2出售成功
序号为184的票被站点Thread-2出售成功
序号为183的票被站点Thread-2出售成功
序号为182的票被站点Thread-2出售成功
序号为181的票被站点Thread-2出售成功
序号为180的票被站点Thread-2出售成功
序号为179的票被站点Thread-2出售成功
序号为178的票被站点Thread-2出售成功
序号为177的票被站点Thread-2出售成功
序号为176的票被站点Thread-2出售成功
序号为175的票被站点Thread-2出售成功
序号为174的票被站点Thread-2出售成功
序号为173的票被站点Thread-2出售成功
序号为172的票被站点Thread-2出售成功
序号为171的票被站点Thread-2出售成功
序号为170的票被站点Thread-2出售成功
序号为169的票被站点Thread-2出售成功
序号为168的票被站点Thread-2出售成功
序号为167的票被站点Thread-2出售成功
序号为166的票被站点Thread-2出售成功
序号为165的票被站点Thread-2出售成功
序号为164的票被站点Thread-2出售成功
序号为163的票被站点Thread-2出售成功
序号为162的票被站点Thread-2出售成功
序号为161的票被站点Thread-2出售成功
序号为160的票被站点Thread-2出售成功
序号为159的票被站点Thread-2出售成功
序号为158的票被站点Thread-2出售成功
序号为157的票被站点Thread-2出售成功
序号为156的票被站点Thread-2出售成功
序号为155的票被站点Thread-2出售成功
序号为154的票被站点Thread-2出售成功
序号为153的票被站点Thread-2出售成功
序号为152的票被站点Thread-2出售成功
序号为151的票被站点Thread-2出售成功
序号为150的票被站点Thread-2出售成功
序号为149的票被站点Thread-2出售成功
序号为148的票被站点Thread-2出售成功
序号为147的票被站点Thread-2出售成功
序号为146的票被站点Thread-2出售成功
序号为145的票被站点Thread-2出售成功
序号为144的票被站点Thread-2出售成功
序号为143的票被站点Thread-2出售成功
序号为142的票被站点Thread-2出售成功
序号为141的票被站点Thread-2出售成功
序号为140的票被站点Thread-2出售成功
序号为139的票被站点Thread-2出售成功
序号为138的票被站点Thread-2出售成功
序号为137的票被站点Thread-2出售成功
序号为136的票被站点Thread-2出售成功
序号为135的票被站点Thread-2出售成功
序号为134的票被站点Thread-2出售成功
序号为133的票被站点Thread-2出售成功
序号为132的票被站点Thread-2出售成功
序号为131的票被站点Thread-2出售成功
序号为130的票被站点Thread-2出售成功
序号为129的票被站点Thread-2出售成功
序号为128的票被站点Thread-2出售成功
序号为127的票被站点Thread-2出售成功
序号为126的票被站点Thread-2出售成功
序号为125的票被站点Thread-2出售成功
序号为124的票被站点Thread-2出售成功
序号为123的票被站点Thread-2出售成功
序号为122的票被站点Thread-2出售成功
序号为121的票被站点Thread-2出售成功
序号为120的票被站点Thread-2出售成功
序号为119的票被站点Thread-2出售成功
序号为118的票被站点Thread-2出售成功
序号为117的票被站点Thread-2出售成功
序号为116的票被站点Thread-2出售成功
序号为115的票被站点Thread-2出售成功
序号为114的票被站点Thread-2出售成功
序号为113的票被站点Thread-2出售成功
序号为112的票被站点Thread-2出售成功
序号为111的票被站点Thread-2出售成功
序号为110的票被站点Thread-2出售成功
序号为109的票被站点Thread-2出售成功
序号为108的票被站点Thread-2出售成功
序号为107的票被站点Thread-2出售成功
序号为106的票被站点Thread-2出售成功
序号为105的票被站点Thread-2出售成功
序号为104的票被站点Thread-2出售成功
序号为103的票被站点Thread-2出售成功
序号为102的票被站点Thread-2出售成功
序号为101的票被站点Thread-2出售成功
序号为100的票被站点Thread-2出售成功
序号为99的票被站点Thread-2出售成功
序号为98的票被站点Thread-2出售成功
序号为97的票被站点Thread-2出售成功
序号为96的票被站点Thread-2出售成功
序号为95的票被站点Thread-2出售成功
序号为94的票被站点Thread-2出售成功
序号为93的票被站点Thread-2出售成功
序号为92的票被站点Thread-2出售成功
序号为91的票被站点Thread-2出售成功
序号为90的票被站点Thread-2出售成功
序号为89的票被站点Thread-2出售成功
序号为88的票被站点Thread-2出售成功
序号为87的票被站点Thread-2出售成功
序号为86的票被站点Thread-2出售成功
序号为85的票被站点Thread-2出售成功
序号为84的票被站点Thread-2出售成功
序号为83的票被站点Thread-2出售成功
序号为82的票被站点Thread-2出售成功
序号为81的票被站点Thread-2出售成功
序号为80的票被站点Thread-2出售成功
序号为79的票被站点Thread-2出售成功
序号为78的票被站点Thread-2出售成功
序号为77的票被站点Thread-2出售成功
序号为76的票被站点Thread-2出售成功
序号为75的票被站点Thread-2出售成功
序号为74的票被站点Thread-2出售成功
序号为73的票被站点Thread-2出售成功
序号为72的票被站点Thread-2出售成功
序号为71的票被站点Thread-2出售成功
序号为70的票被站点Thread-2出售成功
序号为69的票被站点Thread-2出售成功
序号为68的票被站点Thread-2出售成功
序号为67的票被站点Thread-2出售成功
序号为66的票被站点Thread-2出售成功
序号为65的票被站点Thread-2出售成功
序号为64的票被站点Thread-2出售成功
序号为63的票被站点Thread-2出售成功
序号为62的票被站点Thread-2出售成功
序号为61的票被站点Thread-2出售成功
序号为60的票被站点Thread-2出售成功
序号为59的票被站点Thread-2出售成功
序号为58的票被站点Thread-2出售成功
序号为57的票被站点Thread-2出售成功
序号为56的票被站点Thread-2出售成功
序号为55的票被站点Thread-2出售成功
序号为54的票被站点Thread-2出售成功
序号为53的票被站点Thread-2出售成功
序号为52的票被站点Thread-2出售成功
序号为51的票被站点Thread-2出售成功
序号为50的票被站点Thread-2出售成功
序号为49的票被站点Thread-2出售成功
序号为48的票被站点Thread-2出售成功
序号为47的票被站点Thread-2出售成功
序号为46的票被站点Thread-2出售成功
序号为45的票被站点Thread-2出售成功
序号为44的票被站点Thread-2出售成功
序号为43的票被站点Thread-2出售成功
序号为42的票被站点Thread-2出售成功
序号为41的票被站点Thread-2出售成功
序号为40的票被站点Thread-2出售成功
序号为39的票被站点Thread-2出售成功
序号为38的票被站点Thread-2出售成功
序号为37的票被站点Thread-2出售成功
序号为36的票被站点Thread-2出售成功
序号为35的票被站点Thread-2出售成功
序号为34的票被站点Thread-2出售成功
序号为33的票被站点Thread-2出售成功
序号为32的票被站点Thread-2出售成功
序号为31的票被站点Thread-2出售成功
序号为30的票被站点Thread-2出售成功
序号为29的票被站点Thread-2出售成功
序号为28的票被站点Thread-2出售成功
序号为27的票被站点Thread-2出售成功
序号为26的票被站点Thread-2出售成功
序号为25的票被站点Thread-2出售成功
序号为24的票被站点Thread-2出售成功
序号为23的票被站点Thread-2出售成功
序号为22的票被站点Thread-2出售成功
序号为21的票被站点Thread-2出售成功
序号为20的票被站点Thread-2出售成功
序号为19的票被站点Thread-2出售成功
序号为18的票被站点Thread-2出售成功
序号为17的票被站点Thread-2出售成功
序号为16的票被站点Thread-2出售成功
序号为15的票被站点Thread-2出售成功
序号为14的票被站点Thread-2出售成功
序号为13的票被站点Thread-2出售成功
序号为12的票被站点Thread-2出售成功
序号为11的票被站点Thread-2出售成功
序号为10的票被站点Thread-2出售成功
序号为9的票被站点Thread-2出售成功
序号为8的票被站点Thread-2出售成功
序号为7的票被站点Thread-2出售成功
序号为6的票被站点Thread-2出售成功
序号为5的票被站点Thread-2出售成功
序号为4的票被站点Thread-2出售成功
序号为3的票被站点Thread-2出售成功
序号为2的票被站点Thread-2出售成功
序号为1的票被站点Thread-1出售成功

Process finished with exit code 0

可以看到并没有同一张票被卖出多次的情况了,而且顺序也非常整齐,这是因为同步代码块保证了计数器的一致性,序号大的票还没卖掉,就不可能先卖序号小的。

需要注意的是,synchronized关键字后的括号里,需要传入一个全局唯一的对象,如果对象不唯一,那可能会导致同步失效。所以一般可以传当前对象的Class,因为这必然是全局唯一的。

同步方法

下面演示同步方法:
卖票类:

/**
 * 售票站点
 */
public class NewStation2 extends Thread {

    /**
     * 创建一个共享变量,记录当前剩余车票的数量
     */
    public volatile static int count = 500;

    @Override
    public void run() {
        // 使用同步方法
        while(count > 0){
            sell();
        }
    }

    // 同步方法需要加上关键字在权限修饰符后面
    public static synchronized void sell() {
        if (count > 0) {
            System.out.println("序号为" + count + "的票被站点" + Thread.currentThread().getName() + "出售成功");
            count--;
        }
    }
}

测试代码同样是创建3个线程:

public class NewStationTest2 {

    public static void main(String[] args) {
        NewStation2 station1 = new NewStation2();
        NewStation2 station2 = new NewStation2();
        NewStation2 station3 = new NewStation2();

        station1.start();
        station2.start();
        station3.start();
    }
}

输出结果如下

序号为500的票被站点Thread-0出售成功
序号为499的票被站点Thread-0出售成功
序号为498的票被站点Thread-0出售成功
序号为497的票被站点Thread-0出售成功
序号为496的票被站点Thread-0出售成功
序号为495的票被站点Thread-0出售成功
序号为494的票被站点Thread-0出售成功
序号为493的票被站点Thread-0出售成功
序号为492的票被站点Thread-0出售成功
序号为491的票被站点Thread-0出售成功
序号为490的票被站点Thread-0出售成功
序号为489的票被站点Thread-0出售成功
序号为488的票被站点Thread-0出售成功
序号为487的票被站点Thread-0出售成功
序号为486的票被站点Thread-0出售成功
序号为485的票被站点Thread-0出售成功
序号为484的票被站点Thread-0出售成功
序号为483的票被站点Thread-0出售成功
序号为482的票被站点Thread-0出售成功
序号为481的票被站点Thread-0出售成功
序号为480的票被站点Thread-0出售成功
序号为479的票被站点Thread-0出售成功
序号为478的票被站点Thread-0出售成功
序号为477的票被站点Thread-0出售成功
序号为476的票被站点Thread-0出售成功
序号为475的票被站点Thread-0出售成功
序号为474的票被站点Thread-0出售成功
序号为473的票被站点Thread-0出售成功
序号为472的票被站点Thread-0出售成功
序号为471的票被站点Thread-0出售成功
序号为470的票被站点Thread-0出售成功
序号为469的票被站点Thread-0出售成功
序号为468的票被站点Thread-0出售成功
序号为467的票被站点Thread-0出售成功
序号为466的票被站点Thread-0出售成功
序号为465的票被站点Thread-0出售成功
序号为464的票被站点Thread-0出售成功
序号为463的票被站点Thread-0出售成功
序号为462的票被站点Thread-0出售成功
序号为461的票被站点Thread-0出售成功
序号为460的票被站点Thread-0出售成功
序号为459的票被站点Thread-0出售成功
序号为458的票被站点Thread-0出售成功
序号为457的票被站点Thread-0出售成功
序号为456的票被站点Thread-0出售成功
序号为455的票被站点Thread-0出售成功
序号为454的票被站点Thread-0出售成功
序号为453的票被站点Thread-0出售成功
序号为452的票被站点Thread-0出售成功
序号为451的票被站点Thread-0出售成功
序号为450的票被站点Thread-0出售成功
序号为449的票被站点Thread-0出售成功
序号为448的票被站点Thread-0出售成功
序号为447的票被站点Thread-0出售成功
序号为446的票被站点Thread-0出售成功
序号为445的票被站点Thread-0出售成功
序号为444的票被站点Thread-0出售成功
序号为443的票被站点Thread-0出售成功
序号为442的票被站点Thread-0出售成功
序号为441的票被站点Thread-0出售成功
序号为440的票被站点Thread-0出售成功
序号为439的票被站点Thread-0出售成功
序号为438的票被站点Thread-0出售成功
序号为437的票被站点Thread-0出售成功
序号为436的票被站点Thread-0出售成功
序号为435的票被站点Thread-0出售成功
序号为434的票被站点Thread-0出售成功
序号为433的票被站点Thread-0出售成功
序号为432的票被站点Thread-0出售成功
序号为431的票被站点Thread-0出售成功
序号为430的票被站点Thread-0出售成功
序号为429的票被站点Thread-0出售成功
序号为428的票被站点Thread-0出售成功
序号为427的票被站点Thread-0出售成功
序号为426的票被站点Thread-0出售成功
序号为425的票被站点Thread-0出售成功
序号为424的票被站点Thread-0出售成功
序号为423的票被站点Thread-0出售成功
序号为422的票被站点Thread-0出售成功
序号为421的票被站点Thread-0出售成功
序号为420的票被站点Thread-0出售成功
序号为419的票被站点Thread-0出售成功
序号为418的票被站点Thread-0出售成功
序号为417的票被站点Thread-0出售成功
序号为416的票被站点Thread-0出售成功
序号为415的票被站点Thread-0出售成功
序号为414的票被站点Thread-0出售成功
序号为413的票被站点Thread-0出售成功
序号为412的票被站点Thread-0出售成功
序号为411的票被站点Thread-0出售成功
序号为410的票被站点Thread-0出售成功
序号为409的票被站点Thread-0出售成功
序号为408的票被站点Thread-0出售成功
序号为407的票被站点Thread-0出售成功
序号为406的票被站点Thread-0出售成功
序号为405的票被站点Thread-0出售成功
序号为404的票被站点Thread-0出售成功
序号为403的票被站点Thread-0出售成功
序号为402的票被站点Thread-0出售成功
序号为401的票被站点Thread-0出售成功
序号为400的票被站点Thread-0出售成功
序号为399的票被站点Thread-0出售成功
序号为398的票被站点Thread-0出售成功
序号为397的票被站点Thread-0出售成功
序号为396的票被站点Thread-0出售成功
序号为395的票被站点Thread-0出售成功
序号为394的票被站点Thread-0出售成功
序号为393的票被站点Thread-0出售成功
序号为392的票被站点Thread-0出售成功
序号为391的票被站点Thread-0出售成功
序号为390的票被站点Thread-0出售成功
序号为389的票被站点Thread-0出售成功
序号为388的票被站点Thread-0出售成功
序号为387的票被站点Thread-0出售成功
序号为386的票被站点Thread-0出售成功
序号为385的票被站点Thread-0出售成功
序号为384的票被站点Thread-0出售成功
序号为383的票被站点Thread-0出售成功
序号为382的票被站点Thread-0出售成功
序号为381的票被站点Thread-0出售成功
序号为380的票被站点Thread-0出售成功
序号为379的票被站点Thread-0出售成功
序号为378的票被站点Thread-0出售成功
序号为377的票被站点Thread-0出售成功
序号为376的票被站点Thread-0出售成功
序号为375的票被站点Thread-0出售成功
序号为374的票被站点Thread-0出售成功
序号为373的票被站点Thread-0出售成功
序号为372的票被站点Thread-0出售成功
序号为371的票被站点Thread-0出售成功
序号为370的票被站点Thread-0出售成功
序号为369的票被站点Thread-0出售成功
序号为368的票被站点Thread-0出售成功
序号为367的票被站点Thread-0出售成功
序号为366的票被站点Thread-0出售成功
序号为365的票被站点Thread-0出售成功
序号为364的票被站点Thread-0出售成功
序号为363的票被站点Thread-0出售成功
序号为362的票被站点Thread-0出售成功
序号为361的票被站点Thread-0出售成功
序号为360的票被站点Thread-0出售成功
序号为359的票被站点Thread-0出售成功
序号为358的票被站点Thread-0出售成功
序号为357的票被站点Thread-0出售成功
序号为356的票被站点Thread-0出售成功
序号为355的票被站点Thread-0出售成功
序号为354的票被站点Thread-0出售成功
序号为353的票被站点Thread-0出售成功
序号为352的票被站点Thread-0出售成功
序号为351的票被站点Thread-0出售成功
序号为350的票被站点Thread-0出售成功
序号为349的票被站点Thread-0出售成功
序号为348的票被站点Thread-0出售成功
序号为347的票被站点Thread-0出售成功
序号为346的票被站点Thread-0出售成功
序号为345的票被站点Thread-0出售成功
序号为344的票被站点Thread-0出售成功
序号为343的票被站点Thread-0出售成功
序号为342的票被站点Thread-0出售成功
序号为341的票被站点Thread-0出售成功
序号为340的票被站点Thread-0出售成功
序号为339的票被站点Thread-0出售成功
序号为338的票被站点Thread-0出售成功
序号为337的票被站点Thread-0出售成功
序号为336的票被站点Thread-0出售成功
序号为335的票被站点Thread-0出售成功
序号为334的票被站点Thread-0出售成功
序号为333的票被站点Thread-0出售成功
序号为332的票被站点Thread-0出售成功
序号为331的票被站点Thread-0出售成功
序号为330的票被站点Thread-0出售成功
序号为329的票被站点Thread-0出售成功
序号为328的票被站点Thread-0出售成功
序号为327的票被站点Thread-0出售成功
序号为326的票被站点Thread-0出售成功
序号为325的票被站点Thread-0出售成功
序号为324的票被站点Thread-0出售成功
序号为323的票被站点Thread-0出售成功
序号为322的票被站点Thread-0出售成功
序号为321的票被站点Thread-0出售成功
序号为320的票被站点Thread-0出售成功
序号为319的票被站点Thread-0出售成功
序号为318的票被站点Thread-0出售成功
序号为317的票被站点Thread-0出售成功
序号为316的票被站点Thread-0出售成功
序号为315的票被站点Thread-0出售成功
序号为314的票被站点Thread-0出售成功
序号为313的票被站点Thread-0出售成功
序号为312的票被站点Thread-0出售成功
序号为311的票被站点Thread-0出售成功
序号为310的票被站点Thread-0出售成功
序号为309的票被站点Thread-0出售成功
序号为308的票被站点Thread-0出售成功
序号为307的票被站点Thread-0出售成功
序号为306的票被站点Thread-0出售成功
序号为305的票被站点Thread-0出售成功
序号为304的票被站点Thread-0出售成功
序号为303的票被站点Thread-0出售成功
序号为302的票被站点Thread-0出售成功
序号为301的票被站点Thread-0出售成功
序号为300的票被站点Thread-0出售成功
序号为299的票被站点Thread-0出售成功
序号为298的票被站点Thread-0出售成功
序号为297的票被站点Thread-0出售成功
序号为296的票被站点Thread-0出售成功
序号为295的票被站点Thread-0出售成功
序号为294的票被站点Thread-0出售成功
序号为293的票被站点Thread-0出售成功
序号为292的票被站点Thread-0出售成功
序号为291的票被站点Thread-0出售成功
序号为290的票被站点Thread-0出售成功
序号为289的票被站点Thread-0出售成功
序号为288的票被站点Thread-0出售成功
序号为287的票被站点Thread-0出售成功
序号为286的票被站点Thread-0出售成功
序号为285的票被站点Thread-0出售成功
序号为284的票被站点Thread-0出售成功
序号为283的票被站点Thread-0出售成功
序号为282的票被站点Thread-0出售成功
序号为281的票被站点Thread-0出售成功
序号为280的票被站点Thread-0出售成功
序号为279的票被站点Thread-0出售成功
序号为278的票被站点Thread-0出售成功
序号为277的票被站点Thread-0出售成功
序号为276的票被站点Thread-0出售成功
序号为275的票被站点Thread-0出售成功
序号为274的票被站点Thread-0出售成功
序号为273的票被站点Thread-0出售成功
序号为272的票被站点Thread-0出售成功
序号为271的票被站点Thread-0出售成功
序号为270的票被站点Thread-0出售成功
序号为269的票被站点Thread-0出售成功
序号为268的票被站点Thread-0出售成功
序号为267的票被站点Thread-0出售成功
序号为266的票被站点Thread-0出售成功
序号为265的票被站点Thread-0出售成功
序号为264的票被站点Thread-0出售成功
序号为263的票被站点Thread-0出售成功
序号为262的票被站点Thread-0出售成功
序号为261的票被站点Thread-0出售成功
序号为260的票被站点Thread-0出售成功
序号为259的票被站点Thread-0出售成功
序号为258的票被站点Thread-0出售成功
序号为257的票被站点Thread-0出售成功
序号为256的票被站点Thread-0出售成功
序号为255的票被站点Thread-0出售成功
序号为254的票被站点Thread-0出售成功
序号为253的票被站点Thread-0出售成功
序号为252的票被站点Thread-0出售成功
序号为251的票被站点Thread-0出售成功
序号为250的票被站点Thread-0出售成功
序号为249的票被站点Thread-0出售成功
序号为248的票被站点Thread-0出售成功
序号为247的票被站点Thread-0出售成功
序号为246的票被站点Thread-0出售成功
序号为245的票被站点Thread-0出售成功
序号为244的票被站点Thread-0出售成功
序号为243的票被站点Thread-0出售成功
序号为242的票被站点Thread-0出售成功
序号为241的票被站点Thread-0出售成功
序号为240的票被站点Thread-0出售成功
序号为239的票被站点Thread-0出售成功
序号为238的票被站点Thread-0出售成功
序号为237的票被站点Thread-0出售成功
序号为236的票被站点Thread-0出售成功
序号为235的票被站点Thread-0出售成功
序号为234的票被站点Thread-0出售成功
序号为233的票被站点Thread-0出售成功
序号为232的票被站点Thread-0出售成功
序号为231的票被站点Thread-0出售成功
序号为230的票被站点Thread-0出售成功
序号为229的票被站点Thread-0出售成功
序号为228的票被站点Thread-0出售成功
序号为227的票被站点Thread-0出售成功
序号为226的票被站点Thread-0出售成功
序号为225的票被站点Thread-0出售成功
序号为224的票被站点Thread-0出售成功
序号为223的票被站点Thread-0出售成功
序号为222的票被站点Thread-0出售成功
序号为221的票被站点Thread-0出售成功
序号为220的票被站点Thread-0出售成功
序号为219的票被站点Thread-0出售成功
序号为218的票被站点Thread-0出售成功
序号为217的票被站点Thread-0出售成功
序号为216的票被站点Thread-0出售成功
序号为215的票被站点Thread-0出售成功
序号为214的票被站点Thread-0出售成功
序号为213的票被站点Thread-0出售成功
序号为212的票被站点Thread-0出售成功
序号为211的票被站点Thread-0出售成功
序号为210的票被站点Thread-0出售成功
序号为209的票被站点Thread-0出售成功
序号为208的票被站点Thread-0出售成功
序号为207的票被站点Thread-0出售成功
序号为206的票被站点Thread-0出售成功
序号为205的票被站点Thread-0出售成功
序号为204的票被站点Thread-0出售成功
序号为203的票被站点Thread-0出售成功
序号为202的票被站点Thread-0出售成功
序号为201的票被站点Thread-0出售成功
序号为200的票被站点Thread-0出售成功
序号为199的票被站点Thread-0出售成功
序号为198的票被站点Thread-0出售成功
序号为197的票被站点Thread-0出售成功
序号为196的票被站点Thread-0出售成功
序号为195的票被站点Thread-0出售成功
序号为194的票被站点Thread-0出售成功
序号为193的票被站点Thread-0出售成功
序号为192的票被站点Thread-0出售成功
序号为191的票被站点Thread-0出售成功
序号为190的票被站点Thread-0出售成功
序号为189的票被站点Thread-0出售成功
序号为188的票被站点Thread-0出售成功
序号为187的票被站点Thread-0出售成功
序号为186的票被站点Thread-0出售成功
序号为185的票被站点Thread-0出售成功
序号为184的票被站点Thread-0出售成功
序号为183的票被站点Thread-0出售成功
序号为182的票被站点Thread-0出售成功
序号为181的票被站点Thread-0出售成功
序号为180的票被站点Thread-0出售成功
序号为179的票被站点Thread-0出售成功
序号为178的票被站点Thread-0出售成功
序号为177的票被站点Thread-0出售成功
序号为176的票被站点Thread-0出售成功
序号为175的票被站点Thread-0出售成功
序号为174的票被站点Thread-0出售成功
序号为173的票被站点Thread-0出售成功
序号为172的票被站点Thread-0出售成功
序号为171的票被站点Thread-0出售成功
序号为170的票被站点Thread-0出售成功
序号为169的票被站点Thread-0出售成功
序号为168的票被站点Thread-0出售成功
序号为167的票被站点Thread-0出售成功
序号为166的票被站点Thread-0出售成功
序号为165的票被站点Thread-0出售成功
序号为164的票被站点Thread-0出售成功
序号为163的票被站点Thread-0出售成功
序号为162的票被站点Thread-0出售成功
序号为161的票被站点Thread-0出售成功
序号为160的票被站点Thread-0出售成功
序号为159的票被站点Thread-0出售成功
序号为158的票被站点Thread-0出售成功
序号为157的票被站点Thread-0出售成功
序号为156的票被站点Thread-0出售成功
序号为155的票被站点Thread-0出售成功
序号为154的票被站点Thread-0出售成功
序号为153的票被站点Thread-0出售成功
序号为152的票被站点Thread-0出售成功
序号为151的票被站点Thread-0出售成功
序号为150的票被站点Thread-0出售成功
序号为149的票被站点Thread-0出售成功
序号为148的票被站点Thread-0出售成功
序号为147的票被站点Thread-0出售成功
序号为146的票被站点Thread-0出售成功
序号为145的票被站点Thread-0出售成功
序号为144的票被站点Thread-0出售成功
序号为143的票被站点Thread-0出售成功
序号为142的票被站点Thread-0出售成功
序号为141的票被站点Thread-0出售成功
序号为140的票被站点Thread-0出售成功
序号为139的票被站点Thread-0出售成功
序号为138的票被站点Thread-0出售成功
序号为137的票被站点Thread-0出售成功
序号为136的票被站点Thread-0出售成功
序号为135的票被站点Thread-0出售成功
序号为134的票被站点Thread-0出售成功
序号为133的票被站点Thread-0出售成功
序号为132的票被站点Thread-0出售成功
序号为131的票被站点Thread-0出售成功
序号为130的票被站点Thread-0出售成功
序号为129的票被站点Thread-0出售成功
序号为128的票被站点Thread-0出售成功
序号为127的票被站点Thread-0出售成功
序号为126的票被站点Thread-2出售成功
序号为125的票被站点Thread-2出售成功
序号为124的票被站点Thread-2出售成功
序号为123的票被站点Thread-2出售成功
序号为122的票被站点Thread-2出售成功
序号为121的票被站点Thread-2出售成功
序号为120的票被站点Thread-2出售成功
序号为119的票被站点Thread-2出售成功
序号为118的票被站点Thread-2出售成功
序号为117的票被站点Thread-2出售成功
序号为116的票被站点Thread-2出售成功
序号为115的票被站点Thread-2出售成功
序号为114的票被站点Thread-2出售成功
序号为113的票被站点Thread-2出售成功
序号为112的票被站点Thread-2出售成功
序号为111的票被站点Thread-2出售成功
序号为110的票被站点Thread-2出售成功
序号为109的票被站点Thread-2出售成功
序号为108的票被站点Thread-2出售成功
序号为107的票被站点Thread-2出售成功
序号为106的票被站点Thread-2出售成功
序号为105的票被站点Thread-2出售成功
序号为104的票被站点Thread-2出售成功
序号为103的票被站点Thread-2出售成功
序号为102的票被站点Thread-2出售成功
序号为101的票被站点Thread-2出售成功
序号为100的票被站点Thread-2出售成功
序号为99的票被站点Thread-2出售成功
序号为98的票被站点Thread-2出售成功
序号为97的票被站点Thread-2出售成功
序号为96的票被站点Thread-2出售成功
序号为95的票被站点Thread-2出售成功
序号为94的票被站点Thread-2出售成功
序号为93的票被站点Thread-2出售成功
序号为92的票被站点Thread-2出售成功
序号为91的票被站点Thread-2出售成功
序号为90的票被站点Thread-2出售成功
序号为89的票被站点Thread-2出售成功
序号为88的票被站点Thread-2出售成功
序号为87的票被站点Thread-2出售成功
序号为86的票被站点Thread-2出售成功
序号为85的票被站点Thread-2出售成功
序号为84的票被站点Thread-2出售成功
序号为83的票被站点Thread-2出售成功
序号为82的票被站点Thread-2出售成功
序号为81的票被站点Thread-2出售成功
序号为80的票被站点Thread-2出售成功
序号为79的票被站点Thread-2出售成功
序号为78的票被站点Thread-2出售成功
序号为77的票被站点Thread-2出售成功
序号为76的票被站点Thread-2出售成功
序号为75的票被站点Thread-2出售成功
序号为74的票被站点Thread-2出售成功
序号为73的票被站点Thread-2出售成功
序号为72的票被站点Thread-2出售成功
序号为71的票被站点Thread-2出售成功
序号为70的票被站点Thread-2出售成功
序号为69的票被站点Thread-2出售成功
序号为68的票被站点Thread-2出售成功
序号为67的票被站点Thread-2出售成功
序号为66的票被站点Thread-2出售成功
序号为65的票被站点Thread-2出售成功
序号为64的票被站点Thread-2出售成功
序号为63的票被站点Thread-2出售成功
序号为62的票被站点Thread-2出售成功
序号为61的票被站点Thread-2出售成功
序号为60的票被站点Thread-2出售成功
序号为59的票被站点Thread-2出售成功
序号为58的票被站点Thread-2出售成功
序号为57的票被站点Thread-2出售成功
序号为56的票被站点Thread-2出售成功
序号为55的票被站点Thread-2出售成功
序号为54的票被站点Thread-2出售成功
序号为53的票被站点Thread-2出售成功
序号为52的票被站点Thread-2出售成功
序号为51的票被站点Thread-2出售成功
序号为50的票被站点Thread-2出售成功
序号为49的票被站点Thread-2出售成功
序号为48的票被站点Thread-2出售成功
序号为47的票被站点Thread-2出售成功
序号为46的票被站点Thread-2出售成功
序号为45的票被站点Thread-2出售成功
序号为44的票被站点Thread-2出售成功
序号为43的票被站点Thread-2出售成功
序号为42的票被站点Thread-2出售成功
序号为41的票被站点Thread-2出售成功
序号为40的票被站点Thread-2出售成功
序号为39的票被站点Thread-2出售成功
序号为38的票被站点Thread-2出售成功
序号为37的票被站点Thread-2出售成功
序号为36的票被站点Thread-2出售成功
序号为35的票被站点Thread-2出售成功
序号为34的票被站点Thread-2出售成功
序号为33的票被站点Thread-2出售成功
序号为32的票被站点Thread-2出售成功
序号为31的票被站点Thread-2出售成功
序号为30的票被站点Thread-2出售成功
序号为29的票被站点Thread-2出售成功
序号为28的票被站点Thread-2出售成功
序号为27的票被站点Thread-2出售成功
序号为26的票被站点Thread-2出售成功
序号为25的票被站点Thread-2出售成功
序号为24的票被站点Thread-2出售成功
序号为23的票被站点Thread-2出售成功
序号为22的票被站点Thread-2出售成功
序号为21的票被站点Thread-2出售成功
序号为20的票被站点Thread-2出售成功
序号为19的票被站点Thread-2出售成功
序号为18的票被站点Thread-2出售成功
序号为17的票被站点Thread-2出售成功
序号为16的票被站点Thread-2出售成功
序号为15的票被站点Thread-2出售成功
序号为14的票被站点Thread-2出售成功
序号为13的票被站点Thread-2出售成功
序号为12的票被站点Thread-2出售成功
序号为11的票被站点Thread-2出售成功
序号为10的票被站点Thread-2出售成功
序号为9的票被站点Thread-2出售成功
序号为8的票被站点Thread-2出售成功
序号为7的票被站点Thread-2出售成功
序号为6的票被站点Thread-2出售成功
序号为5的票被站点Thread-2出售成功
序号为4的票被站点Thread-2出售成功
序号为3的票被站点Thread-2出售成功
序号为2的票被站点Thread-2出售成功
序号为1的票被站点Thread-2出售成功

Process finished with exit code 0

可以看到售票的序号都很规律了,而且也没有重复卖票的情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值