創(chuàng)建線程2--實(shí)現(xiàn)Runnable接口

2019-07-07 23:44 更新

靜態(tài)代理

1.直接寫的類實(shí)現(xiàn)了Runnable相當(dāng)于真實(shí)角色You。
2.Thread相當(dāng)于靜態(tài)代理角色WeddingCompany。
3.Runnable相當(dāng)于Marry接口。
/**
 * 
 * 靜態(tài)代理 設(shè)計(jì)模式
 * 1.真實(shí)角色
 * 2.代理角色:持有真實(shí)角色的引用。
 * 3.二者實(shí)現(xiàn)相同的接口
 *
 */
public class StaticProxy {


    public static void main(String[] args) {
        //創(chuàng)建真實(shí)角色
        Marry you = new You();
        //創(chuàng)建代理角色 + 真實(shí)角色的引用
        WeddingCompany weddingCompany = new WeddingCompany(you);
        //執(zhí)行任務(wù)
        weddingCompany.marry();
    }
}
//接口
interface Marry{
    public abstract void marry();
}
//真實(shí)角色
class You implements Marry{


    @Override
    public void marry() {
        // TODO Auto-generated method stub
        System.out.println("你和xxx結(jié)婚了!");
    }

    
}
//代理角色
class WeddingCompany implements Marry{
    private Marry you;

    
    public WeddingCompany() {}
    public WeddingCompany(Marry you) {
        this.you = you;
    }

    
    private void before() {
        System.out.println("結(jié)婚之前的準(zhǔn)備工作。。。");
    }

    
    @Override
    public void marry() {
        // TODO Auto-generated method stub
        before();
        you.marry();
        after();
    }

    
    private void after() {
        System.out.println("結(jié)婚之后的收尾工作。。。");
    }
}

使用實(shí)現(xiàn)Runnable接口的方式創(chuàng)建線程:

public class MyThread implements Runnable {
    private int x = 30;

    
    @Override
    public void run() {
        // TODO Auto-generated method stub
        for(int i = 0; i < 10; i++) {
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            synchronized(this) {
                System.out.println(Thread.currentThread().getName()+":x="+x);
                x--;
            }
        }
    }
    public static void main(String[] args) {
        //一個(gè)真實(shí)角色
        MyThread myThread = new MyThread();
        //三個(gè)代理角色
        new Thread(myThread, "a").start();
        new Thread(myThread, "b").start();
        new Thread(myThread, "c").start();
        //注意:可以有三個(gè)代理角色同時(shí)對(duì)一個(gè)對(duì)象代理,但有可能出錯(cuò),需要synchronized保持同步。
    }
}

推薦使用實(shí)現(xiàn)Runnable接口的方式創(chuàng)建線程:

    1.java是單繼承機(jī)制,但可以實(shí)現(xiàn)多個(gè)接口。
    2.可以讓多個(gè)代理同時(shí)對(duì)一個(gè)對(duì)象操作。
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)