`

线程 静态代理的使用

 
阅读更多

 

 

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();
	}
}

 

 

分享到:
评论

相关推荐

    静态代理案例---线程买票

    简单学习多线程有力的好帮手,我也是刚刚学习总结的自己的经验 希望大家借鉴,

    Java多线程 基础学习笔记 / 学习静态代理模式-附件资源

    Java多线程 基础学习笔记 / 学习静态代理模式-附件资源

    Linux多线程服务端编程:使用muduo C++网络库

    《Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。...

    srping5.zip

    代码实现spring bean的生命周期、Ttread线程实例、代理模式(静态代理、动态代理)

    Java面试题.docx

    12、静态代理和动态代理的区别,什么场景使用? 14、Java中实现多态的机制是什么? 16、说说你对Java反射的理解 17、说说你对Java注解的理解 18、Java中String的了解 19、String为什么要设计成不可变的? 20、...

    CLR.via.C#.(中文第3版)(自制详细书签)Part2

    · 使用线程池、任务、取消、计时器和异步I/O操作来设计响应性强、稳定性高和伸缩性大的解决方案 · 借助于异常处理来进行状态管理 · 使用CLR寄宿、AppDomain、程序集加载、反射和C#的dynamic类型来构造具有动态...

    Java 基础面试题

    17. 动态代理和静态代理 18. 封装、继承、多态 19. static加载顺序 20. 代理和反射(3分钟),反射泛型还有用吗 21. final关键字 22. 线程wait和sleep相同点和不同点 23. 为什么start调用run方法,调用run不会...

    coreMQTT-Agent:实现MQTT代理(或守护程序)任务,以在不同的执行线程之间共享简单的MQTT连接

    MQTT代理-使用coreMQTT 注意:MQTT代理和关联的示例项目可以运行,但尚未完成。 请注意,该代理尚未符合我们的代码质量标准,并且尚未经过全面测试。 它的API有可能在其正式的第一个版本之前更改。 欢迎在上提供反馈...

    Lab-Project-coreMQTT-Agent:实现并演示用于在不同执行线程之间共享简单MQTT连接的MQTT代理(或守护程序)任务

    MQTT代理和演示任务(包括OTA)-使用coreMQTT 注意:MQTT代理和关联的示例项目可以运行,但尚未完成。 请注意,该代理尚未符合我们的代码质量标准,并且尚未经过全面测试。 它的API有可能在其正式的第一个版本之前...

    magic-java:Java编程学习资料库

    魔术java Java编程学习资料库。 Java基础 基本1 这里包括基本的Java语法和用法。 Java关键字和用法的基本示例。... 静态代理。 Lambda表达式。 线程同步。 锁。 Java网络 IP地址信息。 通过TCP

    CLR.via.C#.(中文第3版)(自制详细书签)Part1

    · 使用线程池、任务、取消、计时器和异步I/O操作来设计响应性强、稳定性高和伸缩性大的解决方案 · 借助于异常处理来进行状态管理 · 使用CLR寄宿、AppDomain、程序集加载、反射和C#的dynamic类型来构造具有动态...

    CLR.via.C#.(中文第3版)(自制详细书签)

    25.7 使用专用线程执行异步的计算限制操作 25.8 使用线程的理由 25.9 线程调度和优先级 25.10 前台线程和后台线程 25.11 继续学习 第26章 计算限制的异步操作 26.1 CLR线程池基础 26.2 执行简单的计算限制...

    CLR.via.C#.(中文第3版)(自制详细书签)Part3

    · 使用线程池、任务、取消、计时器和异步I/O操作来设计响应性强、稳定性高和伸缩性大的解决方案 · 借助于异常处理来进行状态管理 · 使用CLR寄宿、AppDomain、程序集加载、反射和C#的dynamic类型来构造具有动态...

    疯狂JAVA讲义

    学生提问:当我们使用编译C程序时,不仅需要指定存放目标文件的位置,也需要指定目标文件的文件名,这里使用javac编译Java程序时怎么不需要指定目标文件的文件名呢? 13 1.5.3 运行Java程序 14 1.5.4 根据...

    java进阶13天资料.zip

    day01-复习回顾、静态、继承、引用类型使用 day02-抽象类、接口、代码块,final、单例、枚举 day03-多态、包、权限修饰符、内部类,Object类,Date类 day04-常用API、正则表达式,泛型、Collection集合API day05-...

    java jdk实列宝典 光盘源代码

    代理服务器,ProxyServer.java; telnet客户端,访问系统的telnet服务实质上是与telnet服务建立socket连接,默认的telnet服务的端口是23,TelnetClient.java; UDP编程,包括收发udp报文; 聊天室服务器端,Chat...

Global site tag (gtag.js) - Google Analytics