codecamp

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

静态代理

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.可以让多个代理同时对一个对象操作。
创建线程1--继承Thread
创建线程3--实现Callable接口
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }