`
gmleegmlee
  • 浏览: 119762 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java 反射 函数,多线程调用一个类中不同的方法

阅读更多

public void run()
    {
        try
        {
            Class reflectClass = Class.forName("com.zte.ums.zxnm01.common.alarmReport.AlarmDataExport");
            Method m = reflectClass.getMethod(methodName, new Class[]{WritableSheet.class, WritableWorkbook.class, GenerationService.class});
            m.invoke(reflectClass.newInstance(), new Object[]{ws, wwb, service});
//            alarmDataExport.createHistoryReportByOlt(ws, wwb, service);
            isOk = true;
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
       
    }






public class AlarmThreadHis9 extends Thread
{
    private AlarmDataExport alarmDataExport;
    private WritableSheet ws;
    private WritableWorkbook wwb;
    private GenerationService service;
    public  boolean isOk = false;
    private String methodName;
    
    public AlarmThreadHis9(AlarmDataExport alarmDataExport, WritableSheet ws, WritableWorkbook wwb, GenerationService service, String methodName)
    {
        this.alarmDataExport = alarmDataExport;
        this.ws = ws;
        this.wwb = wwb;
        this.service = service;
        this.methodName = methodName;
    }
    
    public void run()
    {
        try
        {
            Method m = AlarmDataExport.class.getMethod(methodName, new Class[]{WritableSheet.class, WritableWorkbook.class, GenerationService.class});
            m.invoke(alarmDataExport, new Object[]{ws, wwb, service});
//            alarmDataExport.createHistoryReportByOlt(ws, wwb, service);
            isOk = true;
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
       
    }

}






public class AlarmThreadHis extends Thread
{
    private AlarmDataExport alarmDataExport;

    public AlarmThreadHis(AlarmDataExport alarmDataExport)
    {
        this.alarmDataExport = alarmDataExport;
    }
    
    DBOperation[] dbOperations = new DBOperation[8];
    GenerationService[] services = new GenerationService[8];
    String[] methods = new String[]{"createNeAlarmTotalReport","createHistoryReport",
                    "createHistoryReportByTime","createInformReport",
                    "createHistoryReportByOlt","createHistoryReportByOnu",
                    "createHistoryReportByOnuDownLine","createHistoryReportByNeLinked"};
    AlarmThreadHis9[] his9s = new AlarmThreadHis9[8];

    public void run()
    {
        alarmDataExport.printInfoBeforeGenHisAlarmReport();
        try
        {
            String templatePath = Utilities.getTemplateHisAlarmReportPath();
            String destFile = alarmDataExport.getUtil().createHisAlarmReportPath();
            WritableSheet ws = null;
            Workbook hisin = Workbook.getWorkbook(new File(templatePath));
            WritableWorkbook wwb = Workbook.createWorkbook(new File(destFile), hisin);
            CellDataFormaterManager formaterManager = new CellDataFormaterManager(wwb);
           
            
            for(int i = 0; i < 8; i++)
            {
                dbOperations[i] = new DBOperation();
                services[i] = new GenerationService(formaterManager, dbOperations[i]);
                his9s[i] = new AlarmThreadHis9(alarmDataExport, ws, wwb, services[i],methods[i]);
                his9s[i].start();
            }
//            // alarmDataExport.createNeAlarmTotalReport(ws, wwb, service);
//            AlarmThreadHis1 his1 = new AlarmThreadHis1(alarmDataExport, ws, wwb, services[0]);
//            // alarmDataExport.createHistoryReport(ws, wwb, service);
//            AlarmThreadHis2 his2 = new AlarmThreadHis2(alarmDataExport, ws, wwb, services[1]);
////            alarmDataExport.createHistoryReportByTime(ws, wwb, service);
//            AlarmThreadHis3 his3 = new AlarmThreadHis3(alarmDataExport, ws, wwb, services[2]);
////            alarmDataExport.createInformReport(ws, wwb, service);
//            AlarmThreadHis4 his4 = new AlarmThreadHis4(alarmDataExport, ws, wwb, services[3]);
////            alarmDataExport.createHistoryReportByOlt(ws, wwb, service);
//            AlarmThreadHis5 his5 = new AlarmThreadHis5(alarmDataExport, ws, wwb, services[4]);
////            alarmDataExport.createHistoryReportByOnu(ws, wwb, service);
//            AlarmThreadHis6 his6 = new AlarmThreadHis6(alarmDataExport, ws, wwb, services[5]);
////            alarmDataExport.createHistoryReportByOnuDownLine(ws, wwb, service);
//            AlarmThreadHis7 his7 = new AlarmThreadHis7(alarmDataExport, ws, wwb, services[6]);
////            alarmDataExport.createHistoryReportByNeLinked(ws, wwb, service);
//            AlarmThreadHis8 his8 = new AlarmThreadHis8(alarmDataExport, ws, wwb, services[7]);
//            
//            his1.start();
//            his2.start();
//            his3.start();
//            his4.start();
//            his5.start();
//            his6.start();
//            his7.start();
//            his8.start();
//            
//            while(!his1.isOk || !his2.isOk|| !his3.isOk|| !his4.isOk|| !his5.isOk|| !his6.isOk|| !his7.isOk|| !his8.isOk)
//            {
//                System.out.println("running ..." + new Date().toLocaleString());
//                Thread.sleep(6000);
//            }
           while(!isOK())
           {
               System.out.println("running ..." + new Date().toLocaleString());
               Thread.sleep(6000);
           }
            
            for(int i = 0; i < dbOperations.length; i++)
            {
                dbOperations[i].closeDB();
            }
            
            wwb.write();
            alarmDataExport.closeBook(hisin, wwb);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        System.out.println("running:"+ new Date().toLocaleString());
        alarmDataExport.printInfoAfterGenHisAlarmReport();
    }
    
    private boolean isOK()
    {
        for(int i = 0; i < his9s.length; i++)
        {
            if(!his9s[i].isOk)
            {
                return false;
            }
        }
        return true;
    }

}




分享到:
评论

相关推荐

    Android JNI多线程编程回调JAVA函数

    本话题将深入探讨如何在Android中使用JNI进行多线程编程,并实现native方法对Java函数的回调。 1. **JNI基础知识**: - JNI是Java平台的一部分,为Java应用程序提供了与本地代码交互的能力。开发者可以通过JNI在...

    java 反射 线程ppt

    Java反射和线程是Java编程中的两个核心概念,它们在实际开发中有着广泛的应用。反射机制允许我们在运行时检查类、接口、字段和方法的信息,甚至动态调用方法和创建对象,极大地增强了Java的灵活性。而线程则是并发...

    java基础笔记,多线程、反射、java8

    本文将深入探讨Java中的三个核心概念:多线程、反射以及Java 8的新特性,这些都是Java开发者必须掌握的重要知识点。 **多线程** 多线程是Java的一大亮点,它允许程序同时执行多个任务,提高系统资源的利用率和程序...

    java函数速查中文版

    6. **多线程**:Thread类和Runnable接口是Java并发编程的基础,函数速查会涵盖start()、join()、sleep()等线程控制方法。 7. **反射**:Java反射API允许程序在运行时动态访问和修改类的信息,如Class类的forName()...

    java基础反射IO流线程模式

    Java的多线程模型基于线程类`Thread`,可以创建并控制多个同时运行的线程。 #### 创建线程的方式 - 实现`Runnable`接口。 - 继承`Thread`类。 #### 线程生命周期 线程有多种状态:新建、就绪、运行、阻塞和终止...

    java之反射优化(缓存思路)源码

    在Java编程中,反射(Reflection)是一个强大的工具,它允许我们在运行时检查和操作类、接口、字段和方法。然而,反射操作通常比直接的Java代码执行慢,因为它涉及到动态类型检查和方法调用。因此,为了提高性能,...

    Java函数速查

    - `String`是Java中的一个非常重要的类,不可变性是其主要特性。常用的方法有`length()`、`substring()`、`indexOf()`、`replace()`、`trim()`等,用于获取长度、截取子串、查找替换字符等。 3. **数组(Array)** ...

    java常用函数实战讲解.rar

    最后,反射机制是Java的一个强大特性,允许我们在运行时检查类、接口、字段和方法的信息,并能动态调用方法和访问字段。`Class`类和`java.lang.reflect`包中的方法是实现反射的核心。 以上就是“java常用函数实战...

    Java开发技术大全(500个源代码).

    invokeMethod.java 同一个类中调用方法示例 invokeOther.java 类的外部调用方法示例 invokeStaticMethod.java 调用静态方法示例 localVariable.java 演示局部变量 localVSmember.java 局部变量与成员变量同名...

    Java 函数速查 HTML版

    7. **多线程**:Java提供了`Thread`类和`Runnable`接口来支持并发编程,函数如`start()`、`sleep()`、`join()`和同步方法如`synchronized`。 8. **IO/NIO**:Java的`java.io`和`java.nio`包提供了非阻塞I/O操作,如...

    java函数速查中文版.rar

    Java函数速查中文版是一个非常实用的资源,对于学习和工作中快速查找Java编程中的函数用法具有很高的价值。这个压缩包文件包含了一份详尽的Java函数参考指南,它以中文形式呈现,使得中国开发者能够更加方便地理解和...

    java多线程_设计模式_各种技术(我的书架)

    在IT行业中,Java多线程和设计模式是两个至关重要的概念,它们对于构建高效、可扩展的软件系统具有决定性作用。而反射机制和动态代理则进一步增强了Java平台的灵活性和可扩展性。这些主题都是Java开发人员必备的知识...

    java-基础/jvm/多线程

    - 重载发生在同一个类中,方法名相同但参数列表不同。 - 重写发生在子类中,方法名、返回类型和参数列表都与父类相同。 13. **equals和hashCode**: - `equals()`用于比较对象内容是否相等,`hashCode()`用于...

    Java 计算机语言函数应用

    在Java中,函数(或称为方法)是实现特定功能的代码块,可以被多次调用,提高了代码的重用性。本资源"Java 计算机语言函数应用"深入探讨了Java API,这是编写Java程序的核心部分,包含了大量的类和接口,为开发者...

    项目开发中碰到的一个线程问题 (二)

    Java反射API是Java语言提供的一种强大功能,它允许程序在运行时检查类、接口、字段和方法的信息,并能动态地创建对象、调用方法。然而,反射操作本身并不自动支持线程安全,因此在多线程环境下使用反射时,开发者...

    java面试100题

    Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法。Java 反射机制主要提供了以下功能: 1. 在运行时判断任意一个对象所属的类。 2....

    JAVA函数速查

    10. **多线程**:Java内置了对多线程的支持,通过Thread类或Runnable接口可以创建并运行多个执行线程。 11. **反射**:反射允许在运行时检查类、接口、字段和方法的信息,甚至动态调用方法,是Java的一种强大特性。...

    java基础核心学习笔记

    - 多态:一个接口可以有多种不同的实现,允许同一方法根据对象类型表现出不同行为。 3. **包(Package)与导入** - 包:组织Java类的一种方式,避免命名冲突。例如,`java.util`包包含了集合框架和其他实用工具类...

Global site tag (gtag.js) - Google Analytics