售票问题
一、初始代码如下:
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方法退出的方式停止线程,即通知方式,可以在主线程控制某线程的终止