java多线程买票实例

本文深入探讨了多线程环境中同步机制的实现与应用,包括synchronized关键字、同步方法及Lock锁的使用。通过一个具体的售票系统案例,演示了如何在多线程下保护共享资源,防止数据竞争,确保数据一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 3个窗口同时买票
    *
    * 同步:
    * 1:同步代码块
    * synchronized(锁对象(唯一)){
    *
    * …需要被同步的代码
    *
    * }
    * 2:同步方法
    * 修饰符 synchronized 返回值 方法名(){
    * …需要被同步的代码
    * }
    *
    * 3:Lock锁
    * lock.lock() 上锁
    * …需要被同步的代码
    * lock.unlock() 释放锁
    *
    * 同步的使用场景?
    * 1:需要多线程环境
    * 2:需要有共享的资源
    * 3:在多线程的环境下共享资源

public class Demo {

	public static void main(String[] args) {
		//1:创建3个线程
		SellTickets s1 = new SellTickets();
		SellTickets s2 = new SellTickets();
		SellTickets s3 = new SellTickets();
		//2:起名
		s1.setName("窗口1");
		s2.setName("窗口2");
		s3.setName("窗口3");
		//3:启动多线程
		s1.start();
		s2.start();
		s3.start();
		
	}

}

import java.util.ArrayList;

public class SellTickets extends Thread {
	
	static int tickets = 100; //票数
	
	static ArrayList al = new ArrayList<>();
	
	@Override
	public void run() {
		//模拟电影院一直售票
		while(true){
			//条件
			synchronized(al){
				if(tickets>0){
					//网络延迟
					try {
						SellTickets.sleep(100L);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					System.out.println(this.getName()+"正在出售第"+(tickets--)+"张票");
				}
			}
			
			System.out.println("你好吗?");
			
		}
	}
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值