public static HollowChecksum forStateEngineWithCommonSchemas(HollowReadStateEngine stateEngine, HollowReadStateEngine commonSchemasWithState) {
        final Vector<TypeChecksum> typeChecksums = new Vector<TypeChecksum>();
        SimultaneousExecutor executor = new SimultaneousExecutor(HollowChecksum.class, "checksum-common-schemas");

        for(final HollowTypeReadState typeState : stateEngine.getTypeStates()) {
            HollowTypeReadState commonSchemasWithType = commonSchemasWithState.getTypeState(typeState.getSchema().getName());
            if(commonSchemasWithType != null) {
                final HollowSchema commonSchemasWith = commonSchemasWithType.getSchema();
                executor.execute(new Runnable() {
                    public void run() {
                        HollowChecksum cksum = typeState.getChecksum(commonSchemasWith);
                        typeChecksums.addElement(new TypeChecksum(typeState.getSchema().getName(), cksum));
                    }
                });
            }
        }

        try {
            executor.awaitSuccessfulCompletion();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

        Collections.sort(typeChecksums);

        HollowChecksum totalChecksum = new HollowChecksum();

        for(TypeChecksum cksum : typeChecksums) {
            totalChecksum.applyInt(cksum.getChecksum());
        }

        return totalChecksum;
    }
@Test
    public void checksumsCanBeEvaluatedAcrossObjectTypesWithDifferentSchemas() {
        HollowChecksum cksum1 = HollowChecksum.forStateEngineWithCommonSchemas(readEngine1, readEngine2);
        HollowChecksum cksum2 = HollowChecksum.forStateEngineWithCommonSchemas(readEngine2, readEngine1);
        
        Assert.assertEquals(cksum1, cksum2);
    }