I believe that
The first B is for - FirstListener getting bound
second B - SecondListener getting bound
first UB - FirstListener getting unbound
second UB - SecondListener getting unbound
Looks like the secondlistener binding happens first and unbinding of the first happens later.
Try this - u will get a better idea
req.getSession().setAttribute("key", new X());
req.getSession().setAttribute("key", new X());
req.getSession().setAttribute("key", new X());
req.getSession().setAttribute("key", new X());
req.getSession().setAttribute("key", "x");
req.getSession().removeAttribute("key");