不和选择的线程数据安全
package iostudy.synchro;
/**
* 多线程模拟影院选位置
* @since JDK 1.8
* @date 2021/6/18
* @author Lucifer
*/
public class HappyCinema {
public static void main(String[] args) {
/*实例化资源类对象*/
Cinema c = new Cinema(2, "Happy Game!");
/*实例化代理对象*/
new Thread(new Customer(c,2), "James").start();
new Thread(new Customer(c,1), "Harden").start();
}
}
/**
* 内部资源类,定义资源属性和数量
*/
class Cinema{
/*定义资源*/
int available; //可用地位置
String name; //位置名称
/*构造器*/
public Cinema(int available, String name){
this.available = available;
this.name = name;
}
/*购票方法*/
public boolean bookTickets(int seats){
System.out.println("可用位置为:" + available);
/*逻辑判断*/
if (seats > available) {
return false;
}
available -= seats;
return true;
}
}
/**
* 创建顾客类
*/
class Customer implements Runnable{
/*传入资源类对象*/
Cinema cinema;
int seats;
/*创建构造器*/
public Customer(Cinema cinema, int seats){
this.cinema = cinema;
this.seats = seats;
}
/*重写run方法*/