一、泛型

Java1.5后支持。

注:C++中有Template,是真正的泛型,但是会导致类膨胀;Java为伪泛型,编译时自动解析为原类型,也叫类型擦除。

1.Collection

2.Type erasing

-List<long>vs  List<String>

3.?  通配符

二、Java Muti-Processing

1.Process

2.ProcessBuilder

3.Standard out/Error output/standard input

- stdin(0),stdout(1),stderr(2)

- Runntime

以下为通过线程调用系统ipconfig /all命令,获取当前主机相关信息

import java.io.InputStreamReader;
import java.io.LineNumberReader;public class RunCommand {public static void main(String[] args) throws Exception{for(int i=0; i<500; i++){run1("ipconfig");run2("ipconfig");System.out.println("i="+i);}}private static void run1(String command) throws Exception{ProcessBuilder pb = new ProcessBuilder(command, "/all");//, "myArg1", "myArg2");//Map<String, String> env = pb.environment();//env.put("VAR1", "myValue");//env.remove("OTHERVAR");//env.put("VAR2", env.get("VAR1") + "suffix");//pb.directory("myDir");Process p = pb.start();p.getErrorStream();InputStreamReader ir = new InputStreamReader(p.getInputStream());LineNumberReader input = new LineNumberReader(ir);String line;while ((line = input.readLine()) != null) {
//          System.out.println(line);if (line.indexOf("Host Name . . . . . . . . . . . . : ") != -1) {line = line.substring(line.indexOf(":"));System.out.println("Host Name:" + line);}else if (line.indexOf("Primary Dns Suffix  . . . . . . . : ") != -1) {line = line.substring(line.indexOf(":"));System.out.println("domain Name:" + line);}else if (line.indexOf("IPv4 Address. . . . . . . . . . . : ") != -1) {line = line.substring(line.indexOf(":"));System.out.println("IPv4 Address:" + line);}}ir.close();}private static void run2(String command) throws Exception{Process process=Runtime.getRuntime().exec(command);
//      InputStreamReader ir = new InputStreamReader(process.getInputStream());
//      LineNumberReader input = new LineNumberReader(ir);
//      String line;
//      while ((line = input.readLine()) != null) {
//          System.out.println(line);
//      }
//      ir.close();}}

三、JMX

1.Concept

https://www.ibm.com/developerworks/cn/java/j-lo-jse63/

Java Management Extension

Java SE 6新特性:JMX与系统管理

(1) 控制台java命令jps可以查看当前运行的java进程

(2) sun.tools.jconsole.JConsole可以查看运行的JVM的各种信息

JConsole算是JMX的一个Client

(3)Java VisualVM监视工具

2.Mbean

采集CPU利用率、调集方法等等,调用信息。

java.lang  Memory相当于一个Mbean,其有三大属性Attribute (可读写)、Operations(暴露给别人的一个方法,别人可以去调用它)、Notifications(通知,注册后,如有消息变化,则会主动推送到JMX Client)

四、Stand Mbean

1.Coding convention

-Attribute

-Operations

-Notifications

定义Mbean接口,类结尾必须是MBean;

凡成员变量全都必须有get,set方法:

以下类的作用为:暴露一个Mbean,有属性(C盘磁盘利用率),可读写,也有有参数返回值的操作(查看参数路径下的当前所有文件/目录名),写一个Client在里面进行操作Mbean:

public interface ConfigAlertParamMBean {public String getName();public void setName(String name);public double getDiskUsage();public void setDiskUsage(double diskUsage);public boolean changeAlertThreshold(int thresholdPercent);public void stopAndExit();public List<String> listFiles(String directory);   }

实现:

public class ConfigAlertParam implements ConfigAlertParamMBean{private String name; //this is an attributeprivate double diskUsage;private volatile int diskThreshold=80;private volatile boolean stop=false;@Overridepublic String getName() {return name;}@Overridepublic void setName(String name) {this.name=name;}@Overridepublic boolean changeAlertThreshold(int thresholdPercent) {this.diskThreshold=thresholdPercent;System.out.println("====set disk usage threshold:" + thresholdPercent );return true;}public boolean isExceedThreshold(int currentDiskUsage){return currentDiskUsage>=diskThreshold;}@Overridepublic void stopAndExit() {stop=true;}public boolean isStopped(){return stop;}@Overridepublic double getDiskUsage() {// TODO Auto-generated method stub
//      System.out.println("====set disk usage threshold:" + thresholdPercent );File[] roots = File.listRoots();for (File root : roots) {if (root.getPath().equals("C:\\")) {
//              System.out.println("Total space (bytes):" + root.getTotalSpace());
//              System.out.println("Usage space (bytes):" + root.getUsableSpace());
//              System.out.println((double)root.getUsableSpace()/root.getTotalSpace());diskUsage = (double)root.getUsableSpace()/root.getTotalSpace();}    }return diskUsage;}@Overridepublic void setDiskUsage(double diskUsage) {// TODO Auto-generated method stubthis.diskUsage = diskUsage;}@Overridepublic List<String> listFiles(String directory) {// TODO Auto-generated method stubFile dir = new File(directory);File[] files = dir.listFiles();System.out.println(files.length);    List<String> fileName = new ArrayList<String>(); ;for (File file : files) {            System.out.println(file.getAbsolutePath()); fileName.add(file.getAbsolutePath());}return fileName;}}

2.Register Mbean

-RemoteJMX service vi RMI

public class StartJMXServer {// JVM parameters:// -Dcom.sun.management.jmxremote.port=10000 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false//public static void main(String[] args){ConfigAlertParam bean1=new ConfigAlertParam();bean1.setName("disk usage threshold");MBeanServer mbeanServer=ManagementFactory.getPlatformMBeanServer();try{mbeanServer.registerMBean(bean1,ObjectName.getInstance("config:type=AlertParam"));}catch(Exception ex){ex.printStackTrace();}while(!bean1.isStopped()){int currentDiskUsage=new Random().nextInt(90);boolean exceeded = bean1.isExceedThreshold(currentDiskUsage);if(exceeded){System.out.println("disk usage has exceeded threshold:"+currentDiskUsage);System.out.println("The real disk usage is:" + bean1.getDiskUsage());}try{Thread.sleep(2000L);}catch(Exception ex){ex.printStackTrace();}}  System.out.println("jmx sever is stopped");}}

注意在该类Run Configurations的VM arguments中配置参数:
-Dcom.sun.management.jmxremote.port=10000
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false

3.How to access Mbean from other java process?

(1)可通过JConsole接到Mbean进行查看

(2)创建一个JMXClient客户端查看

public class JMXClient1 {public static void main(String[] args) throws Exception {Map<String, Object> jmxEnv=new HashMap<String, Object>();jmxEnv.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.rmi.registry.RegistryContextFactory");jmxEnv.put(RMIConnectorServer.JNDI_REBIND_ATTRIBUTE,"true");JMXServiceURL jmxServerUrl=new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:10000/jmxrmi");JMXConnector connector=JMXConnectorFactory.connect(jmxServerUrl,jmxEnv);MBeanServerConnection conn = connector.getMBeanServerConnection();Object result=conn.invoke(new ObjectName("config:type=AlertParam"), "changeAlertThreshold", new Object[]{ 50 }, new String[]{"int"});//int  java.lang.IntegerSystem.out.println(result);System.out.println(conn.getAttribute(new ObjectName("config:type=AlertParam"), "DiskUsage"));List<String> fileName = (List<String>) conn.invoke(new ObjectName("config:type=AlertParam"), "listFiles", new Object[]{ "C:workspace\\demo3\\src\\jmx" }, new String[]{"java.lang.String"});//int  java.lang.Integerfor (String file : fileName) {            System.out.println(file);   }
//      conn.getAttribute(hostName, attribute);}}

(3)Remote连接其他电脑的状况设置

五、Dynamic MBean

1.Use scenario

-We can’t change existing code to make some objects

2.Override methods

Java Basic3(泛型、Muti-Processing、JMX、Stand Mbean、Dynamic Mbean)相关推荐

  1. 从零开始玩转JMX(四)——Apache Commons Modeler Dynamic MBean

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  2. JMX学习笔记(一)-MBean

    JMX学习笔记(一)-MBean 标签: jmxstringjavainterfaceexceptionclass 2010-12-07 22:20 15360人阅读 评论(5) 收藏 举报  分类: ...

  3. Java通过泛型的模板类型实例化对象

    Java通过泛型的模板类型实例化对象 最近自己研究了下mvvm框架,使用泛型的方式可节省很多代码,并且可以合并很多冗余代码,为了最大化的精简代码想到了通过泛型的type用反射的方式实例化对象,这样对象 ...

  4. 【Java】泛型中 extends 和 super 的区别?

    <? extends T>和<? super T>是Java泛型中的"通配符(Wildcards)"和"边界(Bounds)"的概念. ...

  5. 聊聊Java的泛型及实现

    泛型基础 泛型是对Java语言类型系统的一种扩展,有点类似于C++的模板,可以把类型参数看作是使用参数化类型时指定的类型的一个占位符.引入泛型,是对Java语言一个较大的功能增强,带来了很多的好处: ...

  6. java关于泛型的实验代码_[改善Java代码]强制声明泛型的实际类型

    Arrays工具类有一个方法asList可以把一个变长参数或数组变成列表,但是它有一个缺点:它所生成的List长度是不可改变的,而这在我们的项目开发中很不方便. importjava.util.Arr ...

  7. java基础-泛型举例详解

    泛型 泛型是JDK5.0增加的新特性,泛型的本质是参数化类型,即所操作的数据类型被指定为一个参数.这种类型参数可以在类.接口.和方法的创建中,分别被称为泛型类.泛型接口.泛型方法. 一.认识泛型 在没 ...

  8. java gt_JAVA泛型知识--gt; lt;? extends Tgt;和lt;? super Tgt;

    extends T> 和 super T> 是Java泛型中的"通配符(Wildcards)" 和 "边界(Bounds)"的概念 extends ...

  9. java使用泛型后消除泛型_如何以及何时使用泛型

    java使用泛型后消除泛型 本文是我们名为" 高级Java "的学院课程的一部分. 本课程旨在帮助您最有效地使用Java. 它讨论了高级主题,包括对象创建,并发,序列化,反射等. ...

最新文章

  1. jQuery EasyUI API 中文文档 - DataGrid 数据表格
  2. 查单个值用什么resultset_视光门诊日记—为什么两个医院查的视力不一样
  3. flask第十篇——url_for【3】
  4. mysql-8.0.14-winx64,mysql-8.0.15-winx64 解压版安装教程及退出的三种方式
  5. php swoole udp,基于Swoole如何搭建UDP服务?
  6. ListView的CheckBox实现全部选中/不选中
  7. GTJ2018如何导出全部工程量_工程遇到带E的钢筋应该如何处理?
  8. CSS按钮动画(二)
  9. Total Commander工具栏图标 备份
  10. 第六章 jQuery选择器
  11. 突破百度知道瓶颈,问淘宝引流
  12. GIS技巧100例——10ArcGIS计算图斑椭球面积
  13. 东方卫视收视率查询_全国电视台收视率排行榜
  14. 操作系统:Win10有哪些版本,看完你就知道了
  15. windows播放函数PlaySound
  16. winscp使用教程 linux,WinSCP使用方法教程
  17. STEM创新教育-热量与马铃薯含水量之间的关系
  18. 计算机应用技术班级介绍,【完满超级团支部】计算机应用技术20-4班开展“点燃青春之火,成就辉煌人生”班级演讲活动...
  19. iOS 图片合成(一)
  20. 和菜头翻译 如何不靠运气致富

热门文章

  1. 《亲爱的,热爱的》告诉大家需要具备的网络安全意识
  2. 两端对齐的css,CSS两端对齐(示例代码)
  3. 【词云】iOS如何实现词云
  4. Tomcat服务器配置https认证(使用keytool生成证书)
  5. 安徽高考零分作文nbsp;梯子不用…
  6. 猜成语背单词俄罗斯方块聊天微信流量主小程序开发
  7. Java IO流 处理流--缓冲流(Buffering)
  8. QTextEdit 多行文本框
  9. 最近想写一个小学生口算的app,先把想的思路写下来,具体代码实现等完成后在贴...
  10. 360全景夜景拍摄的五大要点