连接池得例子得小问题

angelcm51 2008-12-03 12:43:29
import java.net.Socket;
import java.util.Hashtable;

public class ConnectionPool
{
private static final int CONNECTION_POOL_SIZE=10;
private static final String API_SERVER_HOST="127.0.0.01";
private static final int API_SERVER_PORT=80;

private static ConnectionPool self=null;

private Hashtable socketPool=null;//连接池
private boolean[] socketStatusArray=null;//连接得状态 true被占用false空闲

public static synchronized void init()
{
self=new ConnectionPool();
self.socketPool=new Hashtable();
self.socketStatusArray=new boolean[CONNECTION_POOL_SIZE];

//初始化连接池
self.buildConnectionPool();
}

public static synchronized void reset()
{
self=null;
init();
}

public static Socket getConnection()
{
if(self==null)
init();

int i=0;
for(i=0;i<CONNECTION_POOL_SIZE;i++)
{
if(!self.socketStatusArray[i])
{
self.socketStatusArray[i]=true;
break;
}
}
if(i<CONNECTION_POOL_SIZE)
return (Socket)self.socketPool.get(new Integer(i));
else
{
System.out.println("从连接池种获取与邮局得连接失败,已经没有空闲连接!");

throw new RuntimeException("No enough pooled connection.");
}
}

public static void releaseConnection(Socket Socket)
{
if(self==null)
init();

for(int i=0;i<CONNECTION_POOL_SIZE;i++)
{
if(((Socket)self.socketPool.get(new Integer(i)))==Socket)
{
self.socketStatusArray[i]=false;
break;
}
}
}

public static Socket rebuildConnection(Socket Socket)
{
if(self==null)
init();

Socket newSocket=null;
for(int i=0;i<CONNECTION_POOL_SIZE;i++)
{
try
{
if(((Socket)self.socketPool.get(new Integer(i)))==Socket)
{
System.out.println("重建连接池中得第"+i+"个连接.");
newSocket=new Socket(API_SERVER_HOST,API_SERVER_PORT);
self.socketPool.put(new Integer(i),newSocket);
self.socketStatusArray[i]=true;
break;
}
}
catch(Exception e)
{
System.out.println("重建连接失败!");
throw new RuntimeException(e);
}
}
return newSocket;
}
public synchronized static void buildConnectionPool()
{
if(self==null)
init();

System.out.println("准备建立连接池.");
Socket Socket=null;
try
{
for(int i=0;i<CONNECTION_POOL_SIZE;i++)
{
Socket=new Socket(API_SERVER_HOST,API_SERVER_PORT);
self.socketPool.put(new Integer(i),Socket);
self.socketStatusArray[i]=false;
}
}
catch(Exception e)
{
System.out.println("与邮局得连接池建立失败!");
throw new RuntimeException(e);
}
}

public synchronized static void releaseAllConnection()
{
if(self==null)
init();

//关闭所有连接
Socket Socket=null;
for(int i=0;i<CONNECTION_POOL_SIZE;i++)
{
Socket=(Socket)self.socketPool.get(new Integer(i));
try
{
Socket.close();
}
catch(Exception e)
{}
}
}
}

javac 编译提示
注意:ConnectionPool.java使用了未经检查或不安全得操作
用javac -Xlint:unchecked 编译提示
84行:警告:对作为普通类型java.util.Hashtable的成员的put(K,V)得调用未经检查
self.socketPool.put(new Integer(i),newSocket);
109行:同样得错误

不明白这个什么意思.
...全文
72 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
chengyu2099 2008-12-03
  • 打赏
  • 举报
回复
一楼正解!
linjingqin 2008-12-03
  • 打赏
  • 举报
回复
从jdk1.5就新增了新特性,要去看看,,泛型,枚举,foreach……
shenjie1989 2008-12-03
  • 打赏
  • 举报
回复
没有给出参数类型
白云冰河 2008-12-03
  • 打赏
  • 举报
回复
主要是jdk1.5后增加了泛型,对集合里的数据进行检查。
你没有给出参数类型,编译器由于无法检查给出的参数是否合乎类型要求,而提示unchecked警告。
对程序没什么影响,你可以忽略。

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧