ZContext implements Closeable { public static ZContext shadow(ZContext ctx) { ZContext shadow = new ZContext(); shadow.setContext(ctx.getContext()); shadow.setMain(false); return shadow; } ZContext(); void destroy(); Socket createSocket(int type); void destroySocket(Socket s); static ZContext shadow(ZContext ctx); int getIoThreads(); void setIoThreads(int ioThreads); int getLinger(); void setLinger(int linger); boolean isMain(); void setMain(boolean main); Context getContext(); void setContext(Context ctx); List<Socket> getSockets(); @Override void close();  }
@Test public void testShadow() { ZContext ctx = new ZContext(); Socket s = ctx.createSocket(ZMQ.PUB); assertTrue(s != null); assertEquals(1, ctx.getSockets().size()); ZContext shadowCtx = ZContext.shadow(ctx); shadowCtx.setMain(false); assertEquals(0, shadowCtx.getSockets().size()); @SuppressWarnings("unused") Socket s1 = shadowCtx.createSocket(ZMQ.SUB); assertEquals(1, shadowCtx.getSockets().size()); assertEquals(1, ctx.getSockets().size()); shadowCtx.destroy(); ctx.destroy(); }