多线程——用创建线程的两种方式分别解决经典窗口卖票问题

本文深入探讨了Java中多线程处理经典窗口卖票问题的方法,通过两种不同的线程创建方式——继承Thread类与实现Runnable接口,详细解释了如何避免线程同步问题,确保票数的正确售卖。通过对线程同步机制如synchronized关键字和wait/notify机制的运用,确保了资源的安全访问。
摘要由CSDN通过智能技术生成
/**
 * 窗口卖票经典实例,第一种继承Thread类多线程进行解决
 * 
 * 
 * 需求:四个窗口同时卖票。票数100张
 * 
 * 分析:
 * 一个有100张票,卖票的动作是四个窗口所使用的,并且是同时进行的,那么就要使用多线程技术。
 * 
 * 怎么创建线程?
 * 1.继承Thread类,并且重写run方法。
 * 2.将卖票的动作定义到run方法当中。
 * */
package com.work.wor01;

class Ticket extends Thread{
	private static int num = 100;//声明成静态变量,利用静态数据的共享性,避免卖重票
	//private int num = 100;如果不声明成静态变量,那么四个窗口每个窗口都会卖100张票,导致重复卖票。

	@Override
	public void run() {
		while(true){     //因为他要运行多少次是不确定的,具体要看cpu的调用
			if(num>0){   //卖票的过程只能是正数,所以在这里放了一个判断
				System.out.println(Thread.currentThread().getName()+"...sale"+num--);
			}else{
				break;
			}
		}
	}
}
public class ThreadTicket {
	public static void main(String[] args) {
		Ticket t1 = new Ticket();
		Ticket t2 = new Ticket();
		Ticket t3 = new Ticket();
		Ticket t4 = new Ticket();
		
		t1.start();
		t2.start(
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值