当前位置:   article > 正文

Java知识点26——模拟12306买票过程、模拟龟兔赛跑的过程、静态代理例子_12306 java gui

12306 java gui

模拟12306买票过程

共享资源,并发(线程安全)  

Web12306.java

  1. /**
  2. * 共享资源,并发(线程安全)
  3. * @author Administrator
  4. *
  5. */
  6. public class Web12306 implements Runnable{
  7. //票数
  8. private int ticketNums=99;
  9. @Override
  10. public void run() {
  11. while(true) {
  12. if(ticketNums<0) {
  13. break;
  14. }
  15. // try {
  16. // Thread.sleep(200); //相当于网络延时问题。会造成数据的不准确性
  17. // } catch (InterruptedException e) {
  18. // // TODO Auto-generated catch block
  19. // e.printStackTrace();
  20. // }
  21. System.out.println(Thread.currentThread().getName()+"--->"+ticketNums--);
  22. }
  23. // TODO Auto-generated method stub
  24. }
  25. public static void main(String[] args) {
  26. //一份资源
  27. Web12306 web=new Web12306();
  28. System.out.println(Thread.currentThread().getName());
  29. //多个代理
  30. new Thread(web,"马畜").start();
  31. new Thread(web,"码农").start();
  32. new Thread(web,"码蝗").start();
  33. }
  34. }


模拟龟兔赛跑的过程

Racer.java

  1. /**
  2. * 模拟龟兔赛跑
  3. * @author Administrator
  4. *
  5. */
  6. public class Racer implements Runnable{
  7. private String winner; //胜利者
  8. @Override
  9. public void run() {
  10. for(int steps=1;steps<=100;steps++) {
  11. //模拟兔子休息
  12. if(Thread.currentThread().getName().equals("rabbit")&&steps%10==0) {
  13. try {
  14. Thread.sleep(10);
  15. } catch (InterruptedException e) {
  16. // TODO Auto-generated catch block
  17. e.printStackTrace();
  18. }
  19. }
  20. System.out.println(Thread.currentThread().getName()+"--->"+steps);
  21. //比赛是否结束
  22. boolean flag=gameOver(steps);
  23. if(flag) {
  24. break;
  25. }
  26. }
  27. }
  28. private boolean gameOver(int steps) {
  29. if(winner!=null) {//存在胜利者
  30. return true;
  31. }else {
  32. if(steps==100) {
  33. winner=Thread.currentThread().getName();
  34. System.out.println("winner==>"+winner);
  35. return true;
  36. }
  37. }
  38. return false;
  39. }
  40. public static void main(String[] args) {
  41. Racer racer=new Racer();
  42. new Thread(racer,"tortoise").start();
  43. new Thread(racer,"rabbit").start();
  44. }
  45. }

小结: 两种线程创建方式的比较

继承Thread类方式的多线程
   • 优势:编写简单
   • 劣势:无法继承其它父类

 实现Runnable接口方式的多线程
   • 优势:可以继承其它类,多线程可共享同一个Runnable对象
  • 劣势:编程方式稍微复杂,如果需要访问当前线程,需要调用Thread.currentThread()方法


静态代理例子

StaticProxy.java

  1. /**
  2. * 静态代理
  3. * 公共接口:
  4. * 1.真实角色
  5. * 2.代理角色
  6. * @author Administrator
  7. *
  8. */
  9. public class StaticProxy {
  10. public static void main(String[] args) {
  11. new WeddingCompany(new You()).happyMarry();
  12. // new Thread(线程对象).start();
  13. }
  14. }
  15. interface Marry{
  16. void happyMarry();
  17. }
  18. //真实角色
  19. class You implements Marry{
  20. @Override
  21. public void happyMarry() {
  22. System.out.println("you and 嫦娥终于奔月啦……");
  23. }
  24. }
  25. //代理角色
  26. class WeddingCompany implements Marry{
  27. //真实角色
  28. private Marry target;
  29. public WeddingCompany(Marry target) {
  30. this.target=target;
  31. }
  32. @Override
  33. public void happyMarry() {
  34. ready();
  35. this.target.happyMarry();
  36. after();
  37. }
  38. private void ready() {
  39. System.out.println("布置猪窝。。。。。");
  40. }
  41. private void after() {
  42. System.out.println("闹玉兔。。。。。。");
  43. }
  44. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/632088
推荐阅读
相关标签
  

闽ICP备14008679号