Java线程创建静态代理模式代码实例
一、背景
在通过Runnable接口创建线程时,启动线程需要借助Thread类,这里就涉及到了静态代理模式。
二、实例
以歌手演出为例,在演出的这个过程中,歌手与他的助理他们有一个共同的目标"完成这场演出"。
为啥需要歌手需要有助理呢?
因为举办好一场演出有很多繁琐的事情要做,为了让歌手专心完成"唱歌"这件事,助理就需要在背后帮助歌手做很多事情。
1.助理负责帮助歌手做一些辅助工作,例如帮忙宣传、帮忙计划行程、帮忙订机票等等。
2.歌手负责唱歌这件事情。
三、实例的代码体现
1.公共的接口show
歌手与助理为了完成演出,都需要为这场演出做一些事情。
2.歌手类Singer实现Show接口
歌手要做的事情主要就是唱歌
3.助理类AssistantManager实现Show接口
助理要帮助歌手做一些辅助的工作
这样写助理和歌手好像并没有联系起来,我们只知道助理和歌手都为了同一场演出做了一些事情。
那这个助理究竟是服务哪一位歌手呢?
A.我们为助理类设置了一个成员变量"歌手"
B.为助理类创建了相应的构造方法
(经过以上两步,助理类在创建时就自带了一个相应的"歌手")
C.在演出所做的事情中,让助理对应的歌手完成"唱歌"这件事。
在创建助理类对象时设置相应的对象,借助助理类对象,就可以完成"演出"这整个过程。
运行代码:
四、总结
1.Java中的Thread类实现了Runable接口
即Thread类相当于上文中的"助理"
2.我们写的类也是实现了Runnable接口
即我们写的类相当于上文中的"歌手"
3.在实现了Runnable接口后通过代理类Thread对象完成线程的启动
A.在代理类Thread对象的创建中,声明了我们所写的实际对象,eg:"myRunnable"。
B.然后由Thread类协助我们完成这一系列的操作。
C.看似简单的start()背后,代理类Thread还帮助我们做了很多事。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
JAVA中的静态代理、动态代理以及CGLIB动态代理总结
代理模式是java中最常用的设计模式之一,尤其是在spring框架中广泛应用.对于java的代理模式,一般可分为:静态代理.动态代理.以及CGLIB实现动态代理. 对于上述三种代理模式,分别进行说明. 1.静态代理 静态代理其实就是在程序运行之前,提前写好被代理方法的代理类,编译后运行.在程序运行之前,class已经存在. 下面我们实现一个静态代理demo: 静态代理 定义一个接口Target package com.test.proxy; public interface Target { p
-
详解 Java静态代理
今天要介绍的是一个Java中一个很重要的概念--代理. 什么是代理?联系生活想想看,代理似乎并不陌生,最形象的代表便是经纪人,明星一般都有经纪人,经纪人作为中间人,负责代理明星的相关事宜,比如说,有人要请明星去唱歌表演,一般不会直接跟明星联系,而是联系他的经纪人,他的经纪人来负责安排行程,而真正唱歌表演的还是明星本人,经纪人仅仅作为一个附加物存在. 在Java中,代理也是这样的概念,来看个栗子: 先来创建一个明星类Stars: public class Stars implements ISta
-
Java代理模式实例详解【静态代理与动态代理】
本文实例讲述了Java代理模式.分享给大家供大家参考,具体如下: 即Proxy Pattern,23种java常用设计模式之一.代理模式的定义:对其他对象提供一种代理以控制对这个对象的访问. Java的代理模式是Java中比较常用的设计模式,分为2中代理:静态代理与动态代理(JDK动态代理和cglib动态代理) 优点: 职责清晰 真实角色只需关注业务逻辑的实现,非业务逻辑部分,后期通过代理类完成即可. 高扩展性 不管真实角色如何变化,由于接口是固定的,代理类无需做任何改动. 缺点: 很明显的一点
-
Java静态代理和动态代理总结
静态代理 第一种实现(基于接口): 1>接口 public interface Hello { void say(String msg); } 2>目标类,至少实现一个接口 public class HelloImpl implements Hello { public void say(String msg) { System.out.println("Hi,"+msg); } } 3>代理类(与目标类实现相同接口,从而保证功能一致) public class He
-
JAVA 静态代理模式详解及实例应用
JAVA 静态代理模式 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问. 代理模式说白了就是"真实对象"的代表,在访问对象时引入一定程度的间接性,因为这种间接性可以附加多种用途. 在这实现代码之前,先讲一个简单的生活故事,我们都知道我们周边有很多公司有房屋买卖或租赁的业务,比如链家(LianJia),但链家本身是不存在任何实际房屋资产的,他所售卖租赁的房屋均需要房屋产权所有人(HomeMaster)提供,才得以实现公司的房源需求:同时公司要的卖房租房业务均需要公司
-
Java代理深入讲解之静态代理
什么是代理 代理就是给目标对象一个代理对象,并由代理对象控制目标的引用. 为什么要使用代理模式 1.通过引入代理对象的方式,可以间接的访问目标对象,避免直接访问目标对象给系统带来不必要的复杂性. 2.通过代理对象可以对原有的业务进行业务增强处理. 举例:如果我们需要买国外的某一件商品A,这个时候我们一般有两个途径要么直接去国外买,要么可以找一些代购人员帮我们去购买.在这种情况下,我们由于直接去国外买,实在是太耗软妹币,而且还要花时间等等,这个时候我们最优的选择就是找代购购买,这样也帮我们省去了很
-
java 静态代理 动态代理深入学习
一.代理模式 代理模式是常用的java设计模式,特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等. 代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务. 按照代理的创建时期,代理类可以分为两种: 静态代理:由程序员创建或特定工具自动生成源代码再对其编译.在程序运行前代理类的.class文件就已经存在了. 动态代理:在
-
Java设计模式之静态代理模式实例分析
本文实例讲述了Java设计模式之静态代理模式.分享给大家供大家参考,具体如下: 代理模式,可以通过代理可以在原来的基础上附加一些其他的操作.静态代理模式相对比较简单无需再程序运行时动态的进行代理. 静态代理模式的角色: ① 抽象角色:真实对象和代理对象的共同接口.其中声明真实对象和代理对象需要做的事. ② 真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用. ③ 代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作. 下面提
-
深入解析java中的静态代理与动态代理
java编码中经常用到代理,代理分为静态代理和动态代理.其中动态代理可以实现spring中的aop. 一.静态代理:程序运行之前,程序员就要编写proxy,然后进行编译,即在程序运行之前,代理类的字节码文件就已经生成了 被代理类的公共父类 复制代码 代码如下: package staticproxy;public abstract class BaseClass { public abstract void add();} 被代理类 复制代码 代码如下: package staticpro
-
Java线程创建静态代理模式代码实例
一.背景 在通过Runnable接口创建线程时,启动线程需要借助Thread类,这里就涉及到了静态代理模式. 二.实例 以歌手演出为例,在演出的这个过程中,歌手与他的助理他们有一个共同的目标"完成这场演出". 为啥需要歌手需要有助理呢? 因为举办好一场演出有很多繁琐的事情要做,为了让歌手专心完成"唱歌"这件事,助理就需要在背后帮助歌手做很多事情. 1.助理负责帮助歌手做一些辅助工作,例如帮忙宣传.帮忙计划行程.帮忙订机票等等. 2.歌手负责唱歌这件事情. 三.实例的
-
Java设计模式之动态代理模式实例分析
本文实例讲述了Java设计模式之动态代理模式.分享给大家供大家参考,具体如下: 前面介绍了静态代理模式,动态代理比静态代理模式更加强大.它能在程序运行时动态的生成代理对象.所谓动态代理类是在运行时生成的class,在生成它时,你必须提供一组interface给它,则动态代理类就宣称它实现了这些interface.当然,动态代理类就充当一个代理,你不要企图它会帮你干实质性的工作,在生成它的实例时你必须提供一个handler,由它接管实际的工作. 动态代理的角色和静态代理的角色一样: ① 抽象角色:
-
java设计模式—静态代理模式(聚合与继承方式对比)
一.概述 1.目标:要在Tank的move()方法做时间代理及日志代理(可以设想以后还要增加很多代理处理),且代理间的顺序可活更换 2.思路: (1)聚合:代理类聚合了被代理类,且代理类及被代理类都实现了movable接口,则可实现灵活多变,具体看代码 (2)继承:继承不够灵活,随着功能需求增多,继承体系会非常臃肿.具体看代码 二.代码 1.Movable.java 2.Tank.java 3.TankTimeProxy.java 4.TankLogProxy.java 5.Tank2Time.
-
Java实现多线程中的静态代理模式
前言 代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能. 简言之,代理模式就是设置一个中间代理来控制访问原目标对象,以达到增强原对象的功能和简化访问方式. 静态代理属于设计模式中的代理模式.反之则有动态代理,本篇文章不展开讲,有兴趣的可自行谷歌研究研究. 其实继承Thread也属于静态代理的一种,所以在这里学习静态代理有助于我们学习多线程. 静态代理 优点:可以在不修改目标对象的前提下扩
-
基于Java创建一个订单类代码实例
这篇文章主要介绍了基于Java创建一个订单类代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 需求描述 定义一个类,描述订单信息 订单id 订单所属用户(用户对象) 订单所包含的商品(不定数量个商品对象) 订单总金额 订单应付金额: 总金额500~1000,打折85折 总金额1000~1500,打折80折 总金额1500~2000,打折70折 总金额超过2000,打折65折 在此基础上,还要看用户的vip等级 用户vip等级为:一般会员,
-
Java线程同步Lock同步锁代码示例
java线程同步原理 java会为每个object对象分配一个monitor,当某个对象的同步方法(synchronizedmethods)被多个线程调用时,该对象的monitor将负责处理这些访问的并发独占要求. 当一个线程调用一个对象的同步方法时,JVM会检查该对象的monitor.如果monitor没有被占用,那么这个线程就得到了monitor的占有权,可以继续执行该对象的同步方法:如果monitor被其他线程所占用,那么该线程将被挂起,直到monitor被释放. 当线程退出同步方法调用时
-
Java线程创建(卖票),线程同步(卖包子)的实现示例
1.线程两种创建方式:new Thread(new Runnable() {}) 如下FileOutputStream源码中抛出异常,为了让写代码人自己写try catch异常提示信息. package com.itheim07.thread; /* * 进程和线程 * 1. 进程 : 航空母舰(资源: 燃油 弹药) * 2. 线程 : 舰载机 * 一个软件运行: 一个军事活动, 必须有一艘航母出去,但执行具体任务的是航母上的舰载机 * 一个软件运行,至少一个进程, 一个进程中至少一个线程.谷歌
-
Java的三种代理模式简述
目录 一.代理模式是什么 二.Java的三种代理模式 1.静态代理 2.动态代理(也叫JDK代理) 3.Cglib代理 一.代理模式是什么 代理模式是一种设计模式,简单说即是在不改变源码的情况下,实现对目标对象的功能扩展. 比如有个歌手对象叫Singer,这个对象有一个唱歌方法叫sing(). 1 public class Singer{ 2 public void sing(){ 3 System.out.println("唱一首歌"); 4 } 5 } 假如你希望,通过你的某种方式
随机推荐
- python实现猜数字游戏(无重复数字)示例分享
- Redis在Laravel项目中的应用实例详解
- PHP_NETWORK_GETADDRESSES: GETADDRINFO FAILED问题解决办法
- PHP简单实现上一页下一页功能示例
- ASP随机数RND()使用方法
- C 语言基础教程(我的C之旅开始了)[六]
- C++ 数字的反转实现实例
- js获取当前页的URL与window.location.href简单方法
- PHP技术开发技巧分享
- checkbox全选/取消全选以及checkbox遍历jQuery实现代码
- Nginx配置指令location匹配符优先级和安全问题
- IIS 6中访问 .rmvb出错的原因
- IIS 6.0的web园 最大工作进程数
- Java GC 机制与内存分配策略详解
- C# using三种使用方法
- vue-music关于Player播放器组件详解
- python儿童学游戏编程知识点总结
- pyQT5 实现窗体之间传值的示例
- MySQL无法存储emoji表情解决方案分析
- 对python添加模块路径的三种方法总结