[2025.1.16 JavaSE学习]售票问题 && 线程终止

售票问题

一、初始代码如下:

public class Thread02{
	public static void main(String[] args){
		SellTicket s1 = new SellTicket();
		SellTicket s2 = new SellTicket();
		SellTicket s3 = new SellTicket();
		s1.start();
		s2.start();
		s3.start();
	}
}

class SellTicket extends Thread{

	private static int num = 100;
	
	@Override
	public void run(){
		while(true){
			
			if(num <= 0){
				break;//end
			}
			
			try{Thread.sleep(50)}
			catch(InterruptedException e){
				e.printStackTrace();
			}
			
			num --;
			System.out.println("Sell A Ticket");
		}
	}
}
  • 结果出现问题如下:出现剩余票数为负数的情况(前面操作的线程还未来得及对num进行操作时,后面的线程就进行判断并操作)

二、使用Runnable进行多线程操作:

public class Thread02{
	public static void main(String[] args){
		SellTicket s1 = new SellTicket();
		new Thread(s1).start();
		new Thread(s1).start();
		new Thread(s1).start();
	}
}

class SellTicket implements Runnable{

	private int num = 100;
	
	@Override
	public void run(){
		while(true){
			
			if(num <= 0){
				break;//end
			}
			
			try{Thread.sleep(50)}
			catch(InterruptedException e){
				e.printStackTrace();
			}
			
			num --;
			System.out.println("Sell A Ticket");
		}
	}
}
  • 这样虽然使用的是同一个对象,但是也会出现超卖现象


线程终止

基本说明

  • 当线程完成任务后,会自动退出
  • 还可以通过使用变量来控制run方法退出的方式停止线程,即通知方式,可以在主线程控制某线程的终止
posted @ 2025-01-16 06:26  Luna-Evelyn  阅读(13)  评论(0)    收藏  举报