synchronized同步的实现——多线程购票

本文介绍了多线程同步的概念,并通过Java的synchronized关键字展示了同步方法在多线程购票场景的应用,详细分析了同步的效果以及线程时间片控制下购票过程的动态变化。
摘要由CSDN通过智能技术生成

同步的由来

当两个或两个以上的线程需要共享资源,必须使用某种方法来确定资源在某一时刻仅被一个线程占用,达到此目的的过程叫做同步。(synchronized)

同步的实现

方法级同步(method-level synchronized)
synchronized void method( ) {
//同步的方法
}
对象级同步( block-level synchronized )
synchronized ( object ) {
//要同步的语句
}

应用场景举例——多线程购票(同步方法)

package com.foot.lesson03;

public class TestSynchronized {
   

    public static void main(String[] args) {
        Tickets ticket = new Tickets();
        BuyerThread bta = new BuyerThread(ticket);
        bta.setName("售票点A");
        BuyerThread btb = new BuyerThread(ticket);
        btb.setName("售票点B");
        bta.start();
        btb.start();
    }

}

class Tickets {
   
    private int count;

    public Tickets() {
        this.count = 10;
    }

    // 购票操作
    public synchronized String sell(String name) {
        if (this.count > 0) {
            count--;
            return name + "购票成功,剩余:" + count;
        }
        return "票已经售完!";
    }
}

class BuyerThread extends Thread {
   
    private Tickets ticket = null;

    public BuyerThread(Tickets ticket) {
        this.ticket = ticket;
    }

    @Override
    public void run() {
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值