@Override
                public void receive(long timestamp, Event[] inEvents, Event[] removeEvents) {
                    EventPrinter.print(timestamp, inEvents, removeEvents);
                    if (inEvents != null) {
                        inEventCount += inEvents.length;
                    }
                    if (removeEvents != null) {
                        removeEventCount += removeEvents.length;
                    }
                    eventArrived = true;
                }
Behaviour of traditional Window and Window are different in join  with themselves.
Traditional Windows joins always maintain two windows and the event is passed to them one after
the other. Therefore, when left window receives a current event right window will bbe empty and
if an event is expired from left window it can join with right window since it will not expire at the same
time. Since Window maintains only one instance, when an event arrives to the window it will
be compared to the internal event chunk, where the current event will match with itself.
When an event expires, it will be immediately removed from the internal event chunk so that,
when joined with the window, the expired event will not match with itself.

@throws InterruptedException throw exception if interrupted the input handler sender.
modules/siddhi-core/src/test/java/io/siddhi/core/window/CustomJoinWindowTestCase.java