目录
- 同步概念与方法:
- 窗口类:
- 测试类:
同步概念与方法:
窗口类:
public class Ticket implements Runnable{ int tickets=20;//总共20张票 @Override public void run() { while (tickets>0) { synchronized (this) { if(tickets>0) { //售票 try { System.out.println(Thread.currentThread开发者_Go教程().getName()+"正在售票"); Thread.sleep(200);//模拟售票操作时间 tickets--;//完成售票 System.oandroidut.println(Thread.currentThread().getName()+"售票完成,"+"剩余"+tickets+"张票"); } catch (InterruptedException e) { e.printStackTrace(); } } } } } }
测试类:
public class Test { public static void main(String[] args) { Ticket ticket = new Ticket(); //模拟三个窗口售票 www.devze.com Thread t1=new Thread(ticket); t1.setName("窗口1"); t1.start(); Thread t2=new Thread(ticket); t2.setName("窗口2"); t2.start(); Thread t3=new Thread(ticket); t3.setName("窗口3"); t3.start(); } }
测试结果:
窗口1正在售票
窗口1售票完成,剩余19张票窗口1正在售票窗口1售票完成,剩余18张票窗口1正在售票窗口1售票完成,剩余17张票窗口3正在售票窗口3售票完成,剩余16张票窗口2正在售票窗口2售票完成,剩余15张票窗口2正在售票窗口2售票完成,剩余14张票窗口2正在售票窗口2售票完成,剩余13张票窗口2正在售票窗python口2售票完成,剩余12张票窗口2正在售票窗口2售票完成,剩余11张票窗口2正在售票窗口2售票完成,剩余10张票窗口2正在售票窗口2售票完成,剩余9张票窗口2正在售票窗口2售票完成,剩余8张票窗android口2正在售票窗口2售票完成,剩余7张票窗口2正在售票窗口2售票完成,剩余6张票窗口2正在售票窗口2售票完成,剩余5张票窗口2正在售票窗口2售票完成,剩余4张票窗口2正在售票窗口2售票完成,剩余3张票窗口2正在售票窗口2售票完成,剩余2张票窗口2正在售票窗口2售票完成,剩余1张票窗口2正在售票窗口2售票完成,剩余0张票Process finished with exit code 0
不加同步锁测试结果:
窗口3正在售票
窗口1正在售票窗口2正在售票窗口1售票完成,剩余18张票窗口1正在售票窗口2售票完成,剩余19张票窗口3售票完成,剩余19张票窗口2正在售票窗口3正在售票窗口2售票完成,剩余16张票窗口2正在售票窗口1售票完成,剩余15张票窗口3售票完成,剩余16张票窗口1正在售票窗口3正在售票窗口3售票完成,剩余13张票窗口1售票完成,剩余14张票窗口1正在售票窗口2售票完成,剩余12张票窗口2正在售票窗口3正在售票窗口2售票完成,剩余10张票窗口1售票完成,剩余11张票窗口1正在售票窗口3售票完成,剩余11张票窗口2正在售票窗口3正在售票窗口2售票完成,剩余8张票窗口1售票完成,剩余8张票窗口3售票完成,剩余8张票窗口1正在售票窗口2正在售票窗口3正在售票窗口2售编程客栈票完成,剩余5张票窗口1售票完成,剩余5张票窗口3售票完成,剩余7张票窗口1正在售票窗口2正在售票窗口3正在售票窗口2售票完成,剩余2张票窗口1售票完成,剩余3张票窗口3售票完成,剩余2张票窗口1正在售票窗口2正在售票窗口3正在售票窗口3售票完成,剩余1张票窗口2售票完成,剩余0张票窗口1售票完成,剩余1张票Process finished with exit code 0
synchronized与Lock锁的区别:
Java synchronized与Lock
到此这篇关于java多线程实现同步锁卖票实战项目的文章就介绍到这了,更多相关java 同步锁卖票内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
精彩评论