3个窗口同时买票*
* 同步:
* 1:同步代码块
* synchronized(锁对象(唯一)){
*
* …需要被同步的代码
*
* }
* 2:同步方法
* 修饰符 synchronized 返回值 方法名(){
* …需要被同步的代码
* }
*
* 3:Lock锁
* lock.lock() 上锁
* …需要被同步的代码
* lock.unlock() 释放锁
*
* 同步的使用场景?
* 1:需要多线程环境
* 2:需要有共享的资源
* 3:在多线程的环境下共享资源
public class Demo {public static void main(String[] args) {//1:创建3个线程SellTickets s1 = new SellTickets();SellTickets s2 = new SellTickets();SellTickets s3 = new SellTickets();//2:起名s1.setName("窗口1");s2.setName("窗口2");s3.setName("窗口3");//3:启动多线程s1.start();s2.start();s3.start();}}
import java.util.ArrayList;public class SellTickets extends Thread {static int tickets = 100; //票数static ArrayList al = new ArrayList<>();@Overridepublic void run() {//模拟电影院一直售票while(true){//条件synchronized(al){if(tickets>0){//网络延迟try {SellTickets.sleep(100L);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(this.getName()+"正在出售第"+(tickets--)+"张票");}}System.out.println("你好吗?");}}}