设计模式剖析系列之动态代理及原理探究

By heiry on 2019-08-17 [ in 技术 ]

java动态代理剖析

动态代理与静态代理最大的不同在于,动态代理中,代理类对象由JVM生成,不再需要我们自己编写代理类。

核心实现:

1. java.lang.reflect.Proxy类动态生成代理类和对象,它提供用于创建动态代理类和实例的静态方法,是由这些方法创建的所有动态代理类的超类。

2.java.lang.reflect.InvocationHandler处理器接口,可以通过invoke方法实现对真实角色的访问。(每次通过Proxy生成代理类对象时都要指定该处理器接口) (更多…)

>> 阅读全文  >>

设计模式剖析系列之装饰模式

By heiry on 2019-08-16 [ in 技术 ]

装饰模式的核心实现:

1.抽象组件(Component):具体类和装饰类基本功能规范,通过二者的实现,可以通过多态方式互为引用。

2.具体组件(Concrete    Component):抽象组件的具体实现类。

3.抽象装饰(Decorator):继承抽象构件,并包含具体构件的实例,可以通过其子类扩展具体构件的功能。

4.具体装饰(ConcreteDecorator):实现抽象装饰的相关方法,并给具体构件对象添加附加的功能。

装饰模式类关系图

下面以实例说明实现过程: (更多…)

>> 阅读全文  >>

类生命周期图示整理

By heiry on 2019-08-15 [ in 技术 ]

java类加载过程

>> 阅读全文  >>

By heiry on 2019-08-14 [ in 随写, 生活, 管理 ]

情感与利益

成王败寇

浅薄的优越

伪情商

>> 阅读全文  >>

深入了解java线程组

By heiry on 2019-08-14 [ in 技术 ]

一. java线程组特点:

1.所有用户创建的线程默认属于main线程组。main线程组是JVM在应用程序运行时自动创建。

2.如果线程A创建了线程B,创建时未指定线程组,那么线程组B自动加入线程A所在线程组。

3.线程一旦加入某个线程组,该线程就一直留着该组中,直至线程死亡,中途不可改变所属线程组。

4.用户创建的线程组默认都有一个父线程组。如线程A创建了线程组X,那么线程A所在线程组则默认称为线程组X的父线程组。

通过以下示例可验证:

package net.mosang.threadgroup;
/**
 * 线程类
 * @author Heiry
 * 模拟登录
 */
public class SignUp implements Runnable{
  private String userName;
  private String passWord;
  
  public SignUp(String userName, String passWord) {
    this.userName = userName;
    this.passWord = passWord;
  }
  @Override
  public void run() {
    System.out.println("你登录的用户名是:"+userName+"密码是:"+passWord);
    if(userName.equals("创建线程组")) {
      ThreadGroup tg = new ThreadGroup("newTg");
      System.out.println("新线程内创建的线程组名是:"+tg.getName());
      System.out.println("新线程内创建的线程组父线程组名是:"+tg.getParent().getName());
    }		
  }
}
package net.mosang.threadgroup;
/**
 * 线程组示例
 * @author Heiry
 *
 */
public class ThreadGroupDemo {
  public static void main(String[] args) {	
    SignUp u1 = new SignUp("heiry", "123");
    SignUp u2 = new SignUp("mosang", "456");
    Thread tu1 = new Thread(u1);//创建线程
    Thread tu2 = new Thread(u2);//创建线程
    System.out.println(tu1.getThreadGroup().getName());//输出“main”,tu1所属线程组
    System.out.println(tu2.getThreadGroup().getName());//输出“main”, tu2所属线程组
    ThreadGroup g1 = new ThreadGroup("用户线程组A");//创建线组,不指定父线程组
    ThreadGroup g2 = new ThreadGroup("用户线程组B");//创建线组,不指定父线程组
    Thread tu3 = new Thread(g1,u1);//创建线程,指定线程组
    Thread tu4 = new Thread(g2,u2);//创建线程,指定线程组
    System.out.println(tu3.getThreadGroup().getName());//输出“用户线程组A”,tu3所属线程组
    System.out.println(tu4.getThreadGroup().getName());//输出“用户线程组B”, tu4所属线程组
    System.out.println("g1父线程组是--->"+g1.getParent().getName()); // 输出“main”
    System.out.println("g2父线程组是--->"+g2.getParent().getName()); // 输出“main”
    SignUp u3 = new SignUp("创建线程组", "789");//线程内将创建线程组
    Thread tu5 = new Thread(g1,u3);//创建线程,指定线程组
    tu5.start();
  }
}

输出结果:

main
main
用户线程组A
用户线程组B
g1父线程组是--->main
g2父线程组是--->main
你登录的用户名是:创建线程组密码是:789
新线程内创建的线程组名是:newTg
新线程内创建的线程组父线程组名是:用户线程组A

(更多…)

>> 阅读全文  >>

不过如此

By heiry on 2019-08-13 [ in 随写, 生活 ]

不过如此

廉价的大度

迷失的自我

弃如草芥

>> 阅读全文  >>

缺憾无憾

By heiry on 2019-08-12 [ in 随写, 生活 ]

缺憾无憾

>> 阅读全文  >>
京ICP备15064511号 © 2009-2017 MOSANG.NET DESIGNED BY HEIRY WU