多线程中的静态代理模式
1、实现多线程的三种方式
- 继承Thread类 【Thread类实现了Runnable接口】
- 实现Runnable接口
- 实现Callable接口
2、静态代理模式例子
静态模式三部分组成:
1.共同实现的接口
2.被代理目标
3.代理
- 例 :你结婚,需要找一个婚庆公司,帮你布置婚礼现场等。这个时候,你 就是被代理对象,婚庆公司就是代理,而结婚就是那个被共同实现的接口。
/**
* @deprecated 静态代理
*
* 1.真实角色 (被代理目标) 本文中的 class You
* 2.代理 本文中的 class WeddingCompany
* 3.接口 本文中的 interface Marry
*
**/
public class StaticProxy {
//测试
public static void main(String[] args) {
//把目标 你 传给 婚庆公司
WeddingCompany weddingCompany = new WeddingCompany(new You());
//执行愉快的结婚这个方法
weddingCompany.HappyMarry();
}
}
//声明结婚接口
interface Marry{
//声明结婚的方法
void HappyMarry();
}
//被代理,目标对象
class You implements Marry {
@Override
public void HappyMarry() {
System.out.println("结婚了");
}
}
//代理角色,帮助布置会场
class WeddingCompany implements Marry {
private Marry target;
public WeddingCompany (Marry target) {
this.target = target;
}
@Override
public void HappyMarry() {
//结婚之前应该做些什么
before();
//调用目标的结婚方法
this.target.HappyMarry();
//结婚之后收取尾款
after();
}
private void after() {
System.out.println("结婚之前,布置会场");
}
private void before() {
System.out.println("结婚之后,收取尾款");
}
}
3、多线程中的Thread类与例子的对比
- 创建一个线程
public class ThreadStudy extends Thread{
new Thread(() -> System.out.println("结婚")).start();
}
Thread源码浅析(跟结婚例子对比)
- 在new Thread的时候 ,类似于例子中的 new WeddingCompany(new You());
- WeddingCompany类实现了Marry接口,Thread类实现了Runnable接口
- Marry接口中定义了 HappyMarry();方法,Runnable接口中定义了run();方法
- 例子中是调用HappyMarry()实现静态代理,Thread是调用接口中的run方法实现静态代理。
总结
- 静态代理三要素: 1.接口(会被代理与被代理共同实现) 2、代理 3、被代理目标
- Thread的静态代理实现流程
1.创建目标对象,并实现与Thread类共同实现的接口Runnable接口。
2.将目标对象传给Thread。
3.调用接口中的run方法