package test.kang;
import test.kang.TicketSystem.Person;
import test.kang.TicketSystem2.Person2;
public class Test20 {
/*线程异步容易出现的问题:线程并发造成的,这就是线程安全问题
* 解决办法:加锁 synchronized
* */
public static void main(String[] args) {
// test1();没加锁的都
test2();
}
public static void test1(){
TicketSystem ts=new TicketSystem();
Person p1=ts.new Person();
Person p2=ts.new Person();
p1.start();
p2.start();
}
public static void test2(){
TicketSystem2 ts=new TicketSystem2();
Person2 p1=ts.new Person2();
Person2 p2=ts.new Person2();
p1.start();
p2.start();
}
}
//不加锁
class TicketSystem{
static int ticket=100;
// class Person implements Runnable{
class Person extends Thread{
void sellTicket(int ticket){
while(true){
if(ticket<=0){
System.out.println("票卖光了:"+ticket);
break;
}else{
ticket--;
System.out.println("剩余票数:"+ticket);
}
}
}
public void run(){
sellTicket(ticket);
}
}
}
//加锁
class TicketSystem2{
public static int ticket2=1000;
boolean life=true;
static String a=new String("1");
// class Person implements Runnable{
class Person2 extends Thread{
public void run(){
while(life){
synchronized(a){
// sellTicket(ticket2);
if(ticket2>0){
ticket2--;
System.out.println(Thread.currentThread().getName()+"卖了一张,剩余票数:"+ticket2);
}else{
System.out.println("票卖光了:"+ticket2);
life=false;
//throw new RuntimeException("票卖光了");
}
}
}
}
}
}