`
rainbow686
  • 浏览: 161686 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java守护线程读取配置文件

    博客分类:
  • Java
阅读更多
对于某些应用需要实时读取配置文件,但是读取的频率非常高,比如1秒100次以上,修改配置文件的频率远远低于读取频率。此时如果当程序执行的时候每次都 读取配置文件,那么系统的io可能会有些压力,因此可以做一个守护线程每隔一段时间(例如1分钟)读取一次配置文件,代码直接取最新的配置文件的值来执 行,这样既降低了读取配置文件的频率又获得了较好的实时性。
代码如下:
java 代码
 
  1. import java.io.InputStream;  
  2. import java.util.Properties;  
  3.   
  4. /** 
  5.  * 系统配置文件类 
  6.  * @author sunbin 
  7.  * 
  8.  */  
  9. public class Configation extends Thread {  
  10.       
  11.     //静态属性类  
  12.     private static Properties p;  
  13.       
  14.     /** 
  15.      * 默认构造方法 
  16.      */  
  17.     public Configation(){  
  18.         //  
  19.     }  
  20.       
  21.     /** 
  22.      * 继承Thread必须要实现的方法 
  23.      */  
  24.     public void run(){  
  25.         while(true){  
  26.             //获取classpath中配置文件  
  27.             InputStream in = Configation.class.getClassLoader().getResourceAsStream("config.properties");  
  28.             if (p == null){  
  29.                 p = new Properties();  
  30.             }  
  31.             try{  
  32.                 p.load(in);  
  33.                 Thread.sleep(10000);//休眠10秒后重新读取配置文件  
  34.             }catch(Exception e){  
  35.                 e.printStackTrace();  
  36.             }  
  37.         }  
  38.     }  
  39.       
  40.     /** 
  41.      * 获取配置文件的实例 
  42.      * @return 
  43.      */  
  44.     public Properties getProperties(){  
  45.         return p;  
  46.     }  
  47.       
  48.     /** 
  49.      * 测试主程序 
  50.      * @param args 
  51.      */  
  52.     public static void main(String[] args){  
  53.         Configation c = new Configation();  
  54.         c.setDaemon(true);//设置线程为守护线程  
  55.         c.start();//启动线程  
  56.         try {  
  57.             Thread.sleep(3000);  
  58.         } catch (InterruptedException e) {  
  59.             e.printStackTrace();  
  60.         }  
  61.         //重复打印配置文件的值,当修改配置文件后1秒立即生效  
  62.         while(true){  
  63.             Properties p = c.getProperties();  
  64.             System.out.println(p.getProperty("com.test.a"));  
  65.         }  
  66.           
  67.     }  
  68.   
  69. }  
其中c.setDaemon(true)设置线程为守护线程,关于守护线程可以参考http://www.google.cn/search?complete=1&hl=zh-CN&q=java+%E5%AE%88%E6%8A%A4%E7%BA%BF%E7%A8%8B&meta=&aq=t&oq=java+%E5%AE%88%E6%8A%A4
分享到:
评论
3 楼 shukeguo 2009-12-18  
c.setDaemon(true);//设置线程为守护线程 为什么一定要守护了。难道一般的用户线程不能做到吗 。你是什么思路
2 楼 putonyuer 2009-09-18  
草  误导人 混淆概念
1 楼 GongWenJun 2008-12-11  
你这个程序有点漏洞,InputStream在下次使用之前如果不关闭的话不会重新加载,所以应该在p.load(in);  后面加上in.close();才可以,要不然不会读取修改后的值的,嘿嘿,不过思路不错

相关推荐

    JAVA 范例大全 光盘 资源

    实例124 爱子(守护线程) 361 实例125 有始有终(线程连接) 363 实例126 模拟下载文件(线程等待和通报) 365 实例127 家族等级(线程优先级) 368 实例128 定时器(Timer) 371 实例129 没法吃饭(死锁) ...

    java范例开发大全源代码

     实例139 利用POI读取Word文件中的内容 208  7.3 字符流 209  实例140 按顺序创建文件 210  实例141 按顺序读取文件 211  实例142 追加文件内容 211  实例143 只显示文件中指定的字符 214  实例...

    java范例开发大全

    实例229 变形金刚中的守护神(守护线程) 424 实例230 查看JVM中所有的线程的活动状况 426 实例231 模仿网络快车下载工具下载文件 428 13.2 多线程的同步与互斥 436 实例232 多线程同步方法的实例 436 实例233 ATM...

    Java范例开发大全 (源程序)

     实例139 利用POI读取Word文件中的内容 208  7.3 字符流 209  实例140 按顺序创建文件 210  实例141 按顺序读取文件 211  实例142 追加文件内容 211  实例143 只显示文件中指定的字符 214  实例144 ...

    Java范例开发大全(全书源程序)

    实例229 变形金刚中的守护神(守护线程) 424 实例230 查看JVM中所有的线程的活动状况 426 实例231 模仿网络快车下载工具下载文件 428 13.2 多线程的同步与互斥 436 实例232 多线程同步方法的实例 436 实例233...

    java范例开发大全(pdf&源码)

    实例229 变形金刚中的守护神(守护线程) 424 实例230 查看JVM中所有的线程的活动状况 426 实例231 模仿网络快车下载工具下载文件 428 13.2 多线程的同步与互斥 436 实例232 多线程同步方法的实例 436 实例233 ATM...

    大数据面试题.doc

    Hadoop 环境变量中的 HADOOP_HEAPSIZE 用于设置所有 Hadoop 守护线程的内存。它默认是 200 GB。( ) 33. DataNode 首次加入 cluster 的时候,如果 log 中报告不兼容文件版本,那需要 NameNode执行"Hadoop namenode -...

    大数据面试题(1).doc

    Hadoop 环境变量中的 HADOOP_HEAPSIZE 用于设置所有 Hadoop 守护线程的内存。它默认是 200 GB。( ) 33. DataNode 首次加入 cluster 的时候,如果 log 中报告不兼容文件版本,那需要 NameNode执行"Hadoop namenode -...

Global site tag (gtag.js) - Google Analytics