阅读(66) (1)

创建线程2--实现Runnable接口

2019-07-07 16:04:13 更新

静态代理

1.直接写的类实现了Runnable相当于真实角色You。
2.Thread相当于静态代理角色WeddingCompany。
3.Runnable相当于Marry接口。
/**
 * 
 * 静态代理 设计模式
 * 1.真实角色
 * 2.代理角色:持有真实角色的引用。
 * 3.二者实现相同的接口
 *
 */
public class StaticProxy {


    public static void main(String[] args) {
        //创建真实角色
        Marry you = new You();
        //创建代理角色 + 真实角色的引用
        WeddingCompany weddingCompany = new WeddingCompany(you);
        //执行任务
        weddingCompany.marry();
    }
}
//接口
interface Marry{
    public abstract void marry();
}
//真实角色
class You implements Marry{


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

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

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

    
    private void before() {
        System.out.println("结婚之前的准备工作。。。");
    }

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

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

使用实现Runnable接口的方式创建线程:

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) {
        //一个真实角色
        MyThread myThread = new MyThread();
        //三个代理角色
        new Thread(myThread, "a").start();
        new Thread(myThread, "b").start();
        new Thread(myThread, "c").start();
        //注意:可以有三个代理角色同时对一个对象代理,但有可能出错,需要synchronized保持同步。
    }
}

推荐使用实现Runnable接口的方式创建线程:

    1.java是单继承机制,但可以实现多个接口。
    2.可以让多个代理同时对一个对象操作。