/** abc三个售票窗口,售50张票。 需求:可以做到同时销售,且不能卖重叠的,以及不能超过50 同步代码块 synchronized(对象){ 同步代码块; } 对象如同锁,持有锁的线程可以在同步中执行 没有持有锁的线程即使获得CPU的执行器,也无法执行。 同步前提: 1.多线程的代码块才需要同步,即run里的代码才需要加同步。对共享数据加同步 2.必须是多个线程使用同一个锁,才需要同步 好处:提高多线程的安全问题 弊端:多个线程需要判断锁,较为消耗资源 */ class Tickt implements Runnable //extends Thread{ { private int tickt=10000; Object obj = new Object(); public void run(){ while(true){ synchronized(obj){ if(tickt>0){ //try{Thread.sleep(100);}catch(InterruptedException e){} System.out.println(Thread.currentThread().getName()+"售票员卖出:"+ tickt-- +"号票"); } } } } } class SaleTickt{ public static void main(String[]args){ Tickt a = new Tickt(); Thread t1 = new Thread(a); Thread t2 = new Thread(a); Thread t3 = new Thread(a); Thread t4 = new Thread(a); t1.start(); t2.start(); t3.start(); t4.start(); } }
时间: 2024-10-13 00:31:48