模拟影院选座
package TCPUDPThread;
import java.util.ArrayList;
import java.util.List;
/**
* 快乐影院
*
* @author pmc
*
*/
public class synchronizedTest6 {
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(6);
available.add(7);
//顾客1
List<Integer> seats1 = new ArrayList<Integer>();
seats1.add(1);
seats1.add(2);
//顾客2
List<Integer> seats2 = new ArrayList<Integer>();
seats2.add(3);
seats2.add(4);
seats2.add(6);
seats2.add(8);
//影院
Cinemas ci = new Cinemas(available, "快乐影院");
new Thread(new Customers(ci, seats1), "s1").start();
new Thread(new Customers(ci, seats2), "s2").start();
}
}
// 顾客
class Customers implements Runnable {
Cinemas cinema;// 影院
List<Integer> seats;// 位子
public Customers(Cinemas cinema, List<Integer> seats) {
super();
this.cinema = cinema;
this.seats = seats;
}
@Override
public void run() {
synchronized (cinema) {
boolean flag = cinema.bookTickets(seats);
if (flag) {
System.out.println("出票成功" + Thread.currentThread().getName() + "-<位置为" + seats);
System.out.println("剩余位置:" + cinema.available);
System.out.println("***********");
} else {
System.out.println("出票失败" + Thread.currentThread().getName() + "-<位置不够");
}
}
}
}
// 电影院
class Cinemas {
List<Integer> available;// 可用位置
String name;// 名称
public Cinemas(List<Integer> available, String name) {
this.available = available;
this.name = name;
}
// 购票
public boolean bookTickets(List<Integer> seats) {
// synchronized (this) {
System.out.println("可用位置为:" + this.available);
List<Integer> copy = new ArrayList<Integer>();
copy.addAll(available);// 模拟 10
// 相减
copy.removeAll(seats);// 10-2=8
// 判断大小 (10-8!=2)?false:true;
if (this.available.size() - copy.size() != seats.size()) {
return false;
}
this.available = copy;
return true;
// }
}
}
模拟12306选座
package TCPUDPThread;
import java.util.ArrayList;
import java.util.List;
/**
* 快乐影院
*
* @author pmc
*
*/
public class synchronizedTest7 {
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(6);
available.add(7);
// 顾客1
List<Integer> seats1 = new ArrayList<Integer>();
seats1.add(1);
seats1.add(2);
// 顾客2
List<Integer> seats2 = new ArrayList<Integer>();
seats2.add(3);
seats2.add(4);
seats2.add(6);
// 影院
Web123069 ci = new Web123069(available, "火车");
new Customers1(seats1, ci, "s1").start();
new Customers1(seats2, ci, "s2").start();
}
}
// 顾客
class Customers1 extends Thread {
List<Integer> seats;// 位子
public Customers1(List<Integer> seats, Runnable target, String name) {
super(target, name);
this.seats = seats;
}
}
// 火车
class Web123069 implements Runnable {
List<Integer> available;// 可用位置
String name;// 名称
public Web123069(List<Integer> available, String name) {
this.available = available;
this.name = name;
}
@Override
public void run() {
Customers1 cc=(Customers1)Thread.currentThread();
boolean flag = this.bookTickets(cc.seats);
if (flag) {
System.out.println("出票成功" + Thread.currentThread().getName() + "-<位置为" + cc.seats);
System.out.println("剩余位置:" + this.available);
System.out.println("***********");
} else {
System.out.println("出票失败" + Thread.currentThread().getName() + "-<位置不够");
}
}
// 购票
public synchronized boolean bookTickets(List<Integer> seats) {
// synchronized (this) {
System.out.println("可用位置为:" + this.available);
List<Integer> copy = new ArrayList<Integer>();
copy.addAll(available);// 模拟 10
// 相减
copy.removeAll(seats);// 10-2=8
// 判断大小 (10-8!=2)?false:true;
if (this.available.size() - copy.size() != seats.size()) {
return false;
}
this.available = copy;
return true;
// }
}
}