线程 静态代理的使用

1 静态代理模式概念和代码:

/**
 * 静态代理 设计模式
 * 1、真实角色
 * 2、代理角色: 持有真实角色的引用
 * 3、二者 实现相同的接口
 * 
 * @author Administrator
 *
 */
 //接口
interface Marry{
	public abstract void marry();
}


public class StaticProxy {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//创建真实角色
		Marry you =new You();
		//创建代理角色 +真实角色的引用
		WeddingCompany company =new WeddingCompany(you);
		//执行任务
		company.marry();
	}

}

//真实角色
class You implements Marry{

	@Override
	public void marry() {
		System.out.println("you and  嫦娥结婚了....");
	}
	
}
//代理角色
class WeddingCompany implements Marry{
	private Marry you;
	public WeddingCompany() {
	}
	
	public WeddingCompany(Marry you) {
		this.you = you;
	}
	private void before(){
		System.out.println("布置猪窝....");
		
	}
	private void after(){
		System.out.println("闹玉兔....");
	}
	@Override
	public void marry() {
		before(); // 代理对象的方法
		you.marry();// 使用真实对象的方法
		after();// 代理对象的方法
	}
	
}

2 线程类Thread中静态代理模式:

	Thread是代理类,在 new Thread(目标类), 
	目标类 implements Runnable
	接口 Runnable  方法run()
	
	然后在代理类的 run(){ 调用目标类.run()}

创建线程使用静态代理写法:

/**
 * 方便共享资源
 * @author Administrator
 *
 */
public class Web12306 implements Runnable {
	private int num =50;

	@Override
	public void run() {
		while(true){
			if(num<=0){
				break; //跳出循环
			}
			System.out.println(Thread.currentThread().getName()+"抢到了"+num--);
		}
	}
	
	public static void main(String[] args) {
		//真实角色
		Web12306 web = new Web12306();
		//代理
		Thread t1 =new Thread(web,"路人甲");
		Thread t2 =new Thread(web,"黄牛已");
		Thread t3 =new Thread(web,"攻城师");
		//启动线程
		t1.start();
		t2.start();
		t3.start();
	}
}

猜你喜欢

转载自chengjianxiaoxue.iteye.com/blog/2400931
今日推荐