Java知识点26——模拟12306买票过程、模拟龟兔赛跑的过程、静态代理例子
生活随笔
收集整理的這篇文章主要介紹了
Java知识点26——模拟12306买票过程、模拟龟兔赛跑的过程、静态代理例子
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
模擬12306買(mǎi)票過(guò)程
共享資源,并發(fā)(線程安全)??
Web12306.java
/*** 共享資源,并發(fā)(線程安全)* @author Administrator**/ public class Web12306 implements Runnable{//票數(shù)private int ticketNums=99;@Overridepublic void run() {while(true) {if(ticketNums<0) {break;} // try { // Thread.sleep(200); //相當(dāng)于網(wǎng)絡(luò)延時(shí)問(wèn)題。會(huì)造成數(shù)據(jù)的不準(zhǔn)確性 // } catch (InterruptedException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // }System.out.println(Thread.currentThread().getName()+"--->"+ticketNums--);}// TODO Auto-generated method stub}public static void main(String[] args) {//一份資源Web12306 web=new Web12306();System.out.println(Thread.currentThread().getName());//多個(gè)代理new Thread(web,"馬畜").start();new Thread(web,"碼農(nóng)").start();new Thread(web,"碼蝗").start();} }模擬龜兔賽跑的過(guò)程
Racer.java
/*** 模擬龜兔賽跑* @author Administrator**/ public class Racer implements Runnable{private String winner; //勝利者@Overridepublic void run() {for(int steps=1;steps<=100;steps++) {//模擬兔子休息if(Thread.currentThread().getName().equals("rabbit")&&steps%10==0) {try {Thread.sleep(10);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}System.out.println(Thread.currentThread().getName()+"--->"+steps);//比賽是否結(jié)束boolean flag=gameOver(steps);if(flag) {break;}}}private boolean gameOver(int steps) {if(winner!=null) {//存在勝利者return true;}else {if(steps==100) {winner=Thread.currentThread().getName();System.out.println("winner==>"+winner);return true;}}return false;}public static void main(String[] args) {Racer racer=new Racer();new Thread(racer,"tortoise").start();new Thread(racer,"rabbit").start();} }小結(jié):?兩種線程創(chuàng)建方式的比較
繼承Thread類方式的多線程
? ?? 優(yōu)勢(shì):編寫(xiě)簡(jiǎn)單
? ?? 劣勢(shì):無(wú)法繼承其它父類
?實(shí)現(xiàn)Runnable接口方式的多線程
? ?? 優(yōu)勢(shì):可以繼承其它類,多線程可共享同一個(gè)Runnable對(duì)象
? ? 劣勢(shì):編程方式稍微復(fù)雜,如果需要訪問(wèn)當(dāng)前線程,需要調(diào)用Thread.currentThread()方法
靜態(tài)代理例子
StaticProxy.java
/*** 靜態(tài)代理* 公共接口:* 1.真實(shí)角色* 2.代理角色* @author Administrator**/ public class StaticProxy {public static void main(String[] args) {new WeddingCompany(new You()).happyMarry();// new Thread(線程對(duì)象).start();}} interface Marry{void happyMarry(); } //真實(shí)角色 class You implements Marry{@Overridepublic void happyMarry() {System.out.println("you and 嫦娥終于奔月啦……");} } //代理角色 class WeddingCompany implements Marry{//真實(shí)角色private Marry target;public WeddingCompany(Marry target) {this.target=target;}@Overridepublic void happyMarry() {ready();this.target.happyMarry();after();}private void ready() {System.out.println("布置豬窩。。。。。");}private void after() {System.out.println("鬧玉兔。。。。。。");} }?
總結(jié)
以上是生活随笔為你收集整理的Java知识点26——模拟12306买票过程、模拟龟兔赛跑的过程、静态代理例子的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 数据库知识点2——关系模型之基本概念
- 下一篇: java的知识点27——lambda推导