实现成功购票(同步块)
public class dxcYingyuan {
public static void main(String[] args) {
Cinemn cinemn=new Cinemn(20,"aaa");
new Thread(new Customer(cinemn,2),"dd").start();
new Thread(new Customer(cinemn,1),"cc").start();
}
}
class Customer implements Runnable{
Cinemn cinemn;
int seats;
public Customer(Cinemn cinemn, int seats) {
this.cinemn = cinemn;
this.seats = seats;
}
@Override
public void run() {
synchronized (cinemn){
boolean flag=cinemn.bookTickets(seats);
if(flag){
System.out.println("出票成功"+Thread.currentThread().getName()+"--位置为"+seats);
}else {
System.out.println("出票失败"+Thread.currentThread().getName()+"票数不够");
}
}
}
}
class Cinemn{
int available;
String name;
public Cinemn(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;
}
}
实现选择位置功能
import java.util.ArrayList;
import java.util.List;
public class dxcYingyuan01 {
public static void main(String[] args) {
List<Integer> available=new ArrayList<Integer>();
available.add(1);
available.add(2);
available.add(3);
available.add(4);
available.add(5);
List<Integer> seats1=new ArrayList<Integer>();
seats1.add(1);
seats1.add(2);
seats1.add(3);
List<Integer> seats2=new ArrayList<Integer>();
seats2.add(4);
seats2.add(5);
Cinemn01 cinemn01=new Cinemn01("坑死人影院",available);
new Thread(new Customer01(cinemn01,seats1),"顾客1").start();
new Thread(new Customer01(cinemn01,seats2),"顾客2").start();
}
}
class Customer01 implements Runnable{
Cinemn01 cinemn01;
List<Integer> seats;
public Customer01(Cinemn01 cinemn01, List<Integer> seats) {
this.cinemn01 = cinemn01;
this.seats = seats;
}
@Override
public void run() {
synchronized (cinemn01){
boolean flag=cinemn01.bookTickets(seats);
if(flag){
System.out.println("出票成功"+Thread.currentThread().getName()+"--位置为"+seats);
}else {
System.out.println("出票失败"+Thread.currentThread().getName()+"--票数不够");
}
}
}
}
class Cinemn01{
String name;
List<Integer> available;
public Cinemn01(String name, List<Integer> available) {
this.name = name;
this.available = available;
}
public boolean bookTickets(List<Integer> seats){
System.out.println("当前可用位置有:"+available);
List<Integer> copy=new ArrayList<Integer>();
copy.addAll(available);
copy.removeAll(seats);
if(available.size()-copy.size()!=seats.size()){
return false;
}
available=copy;
return true;
}
}