当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:14:00  来源:本站整理

Java中finalize()的另类用法[Java编程]

赞助商链接



  本文“Java中finalize()的另类用法[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

做过JAVA编程的都知道,在JAVA中有一种垃圾汇集器的机制,当它运行时(普通在系统内存低到一定限度时自动运行),会回收不再利用的对象所占用的内存,所以,在JAVA程序中,我们普通只考虑成立对象,而从不关心对象的排除.Finalize()是JAVA为类供应的一种特别办法.垃圾汇集器的工作历程大致是这样的:一旦垃圾汇集器预备好释放无用对象占用的存储空间,它首先调用那些对象的finalize()办法,然后才真正回收对象的内存.通过利用finalize(),便可以在垃圾汇集器运行期间举行一些特别的工作.下面一例就阐明了finalize()的一种巧妙用法.

目前的商业利用系统越来越多的采取WEB情势.在WEB情势利用中,每一次页面拜候是独立的,前后不相关联,哪怕多个用户在同一时刻拜候利用的同一个页面,用户彼此之间也是不知道的.假如想要查抄当前有哪些用户正在利用系统(如预备恢复数据备份或举行系统进级时,系统管理员都很但愿知道这些信息),该怎么办呢? 基于Servlet、Jsp技术的WEB服务器供应了隐含的Session、Application对象,操纵它可以帮开辟者实现一些信息的持续保存和同享.当用户拜候一个WEB利用时,WEB服务器会自动成立一个Session对象,该对象可以供用户在会话期内涵利用的全部页面中同享数据; Application是WEB利用的一个全局对象.操纵Session、Application对象,可以到达跟踪全部用户信息的目的.

当用户翻开浏览器开始恳求WEB利用的登录页面时,WEB服务即为该客户成立一个session,此后,在session的timeout时间内,该客户都利用这个session(timeout时间可设置,如Tomcat服务器是在各利用的web.xml文件中设置).假如利用IE浏览器,Session与客户IP地址、客户程序进程ID所共同标识的衔接有对应关系,相同IP地址、相同进程的窗口(如通过IE-文件-新建-窗口 翻开的新窗口)具有同一个session,所以session可用于标识各个独立的客户利用衔接.

下面是一个样例

为了便利处理,先建一个简单类(user)用来表达用户信息及存放sessionId:

package com;
public class user {
public String name="";
public String sessionId="";
}

另一个类(testSession)用于处理用户的login、logout等行动信息,使系统可以跟踪当前衔接的用户信息.

package com;
import java.util.Vector;
import com.user;
public class testSession {
public user User;
private Vector vsid;
public testSession()
{
User=new user();
}
public boolean verify(String username,String password)
throws Exception //考证用户/密码
{
return true;
}
public void setSessionVar(String sesid,Vector sid) {
this.User.sessionId=sesid;
this.vsid=sid;
}
private static synchronized void addappses(user puser,
Vector pvsid) { //记录一个新衔接的用户
int pos=-1;
user l_user;
if (puser==null || pvsid==null)
return;
for(int i=0;i<pvsid.size();i++){
l_user=(user)pvsid.get(i);
if(l_user.sessionId.equals(puser.sessionId)){
pos=i;
break;
}
}
if(pos==-1){
pvsid.add(puser);
}
else{
pvsid.set(pos,puser);
}
}
private static synchronized void removeappses(user puser,
Vector pvsid) { //移除一个退出的用户
int pos=-1;
user l_user;
if (puser==null || pvsid==null)
return;
for(int i=0;i<pvsid.size();i++){
l_user=(user)pvsid.get(i);
if(l_user.sessionId.equals(puser.sessionId)){
pos=i;
break;
}
}
if(pos!=-1){
pvsid.remove(pos);
}
}
protected void finalize() {
this.removeappses(this.User,this.vsid);
}
public boolean login(String username) throws Exception
{ //处理登录
this.User.name=username;
this.addappses(this.User,this.vsid);
return true;
}
public boolean logout() throws Exception
{ //处理注销
this. finalize();
this.User=null;
this.vsid=null;
return true;
}
}


  以上是“Java中finalize()的另类用法[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 利用Javascript实现网页水印(非图片水印)
  • Java开辟环境的搭建
  • Ubuntu java安装与配置
  • 办理Ubuntu 10.04 Firefox3.6 Java浏览器插件不工作的问
  • Ubuntu重装后Java环境的设置
  • Sun Java进入Ubuntu 10.10软件中央
  • Ubuntu 10.10配置Java开辟环境
  • 在Ubuntu 10.10中配置Java环境变量的办法
  • Ubuntu下Java环境的搭建
  • Ubuntu 10.04 下安装 Java, JRE
  • Ubuntu 10.04下的搭建SUN JAVA开辟环境
  • Ubuntu 12.04安装java7
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .