同步方法解决多线程环境下的数据安全问题案例

本文介绍了一个使用Java实现的 SellTicket 类,它实现了 Runnable 接口,通过同步块确保在多个线程中安全地售卖100张票。展示了如何使用 synchronized 和 try-catch 机制来避免竞态条件,确保数据一致性。在Main类中,通过创建并启动三个窗口线程来演示并发操作。

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

public class SellTicket implements Runnable{
	private int tickets=100;
	Object obj=new Object();
	int x=0;
	@Override
	public void run() {
		while(true) {
			if(x%2==0) {
				synchronized (obj) {
					try {
						Thread.sleep(1);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					if(tickets>0) {
						System.out.println(Thread.currentThread().getName()+"正在售出第"+(tickets--)+"张票");
					}else {
						synchronized(obj) {
							try {
								Thread.sleep(1);
							} catch (InterruptedException e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
							}
							if(tickets>0) {
								System.out.println(Thread.currentThread().getName()+"正在售出第"+(tickets--)+"张票");
							}
					
						}
					}
				}
			}
			x++;
			
			
		}
	}

}
package 同步方法解决数据安全问题X除二取余;

public class Main {
	public static void main(String agrs[]) {
		SellTicket s1=new SellTicket();
		
		Thread t1=new 
				Thread(s1,"窗口A");
		Thread t2=new Thread(s1,"窗口B");
		Thread t3=new Thread(s1,"窗口C");

		t3.start();
		
		t2.start();
		t1.start();
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

覃定忠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值