Java 如何使用和测试等待和通知
我不习惯使用等待和通知。我在测试代码时遇到困难。下面是我的实现:(注意:我没有包括所有的实现)Java 如何使用和测试等待和通知,java,wait,notify,Java,Wait,Notify,我不习惯使用等待和通知。我在测试代码时遇到困难。下面是我的实现:(注意:我没有包括所有的实现) 为了测试等待和通知,您需要多个线程。否则,等待的线程将阻塞,并且永远不会到达通知代码,因为它位于同一线程上 p.S.的实施并非易事。我甚至不想麻烦,因为。大家好,你们应该为你们的连接池准备一门现成的课程。但是如果你坚持,我已经为你修改了代码: public class PoolImp { private Vector<Connection> connections; // For no
为了测试等待和通知,您需要多个线程。否则,等待的线程将阻塞,并且永远不会到达通知代码,因为它位于同一线程上
p.S.的实施并非易事。我甚至不想麻烦,因为。大家好,你们应该为你们的连接池准备一门现成的课程。但是如果你坚持,我已经为你修改了代码:
public class PoolImp {
private Vector<Connection> connections; // For now maximum of 1 connection
public synchronized Connection getconnection() {
while(connections.isEmpty()) {
this.wait();
}
return newConnection();
}
public synchronized void removeconnection(Connection c) {
connections.add(c);
this.notify();
}
公共类PoolImp{
私有向量连接;//目前最多1个连接
公共同步连接getconnection(){
while(connections.isEmpty()){
这个。等等();
}
返回newConnection();
}
公共同步的void removeconnection(连接c){
添加(c);
this.notify();
}
}用while循环替换if块是一种改进,但不能解决实际问题。它只需在发出notify()后强制再次检查集合的大小,以确保在发出notify()时所做声明的有效性 正如前面指出的,您需要多个客户端线程来模拟这一点。调用时,测试线程被阻止 conn_2=cp.getConnection() 现在,它永远不会有机会发出这个调用,因为它将无限期地等待(除非它被中断)
cp.removeConnection(连接1) 这不是
wait()
和notify()
的意思。什么是1()
?wait()可能会错误返回,因此您需要使用while loop.FYI。有许多连接池实现。说出一对夫妇的名字——还有。如果现在的轮子能帮你完成任务,就不需要再发明轮子了。好吧!!谢谢各位。。让我看看我能做什么…正确使用这些方法是非常困难的。你失败了。使用更高级别的抽象,如阻塞队列,它将为您完成所有等待/通知脏任务。。我以为“这”是synchronized@user1180969哦,你说得对,我错过了你方法中的synchronized
!我马上就搞定答案。。。
public void testGetConnections() throws SQLException
{
PoolImpl cp = new PoolImpl();
Connection conn_1 = null;
Connection conn_2 = null;
conn_1 = cp.getConnection();
conn_2 = cp.getConnection();
cp.removeConnection(conn_1);}
}
public class PoolImp {
private Vector<Connection> connections; // For now maximum of 1 connection
public synchronized Connection getconnection() {
while(connections.isEmpty()) {
this.wait();
}
return newConnection();
}
public synchronized void removeconnection(Connection c) {
connections.add(c);
this.notify();
}