public static void generateParallel(Spatial scene, ExecutorService executor) {
        final Set<Mesh> meshes = new HashSet<>();
        scene.breadthFirstTraversal(new SceneGraphVisitor() {
            @Override
            public void visit(Spatial spatial) {
                if (spatial instanceof Geometry) {
                    Geometry geom = (Geometry) spatial;
                    Mesh mesh = geom.getMesh();

                    // Check to ensure mesh has texcoords and normals before generating
                    if (mesh.getBuffer(Type.TexCoord) != null
                            && mesh.getBuffer(Type.Normal) != null) {
                        meshes.add(mesh);
                    }
                }
            }
        });
        List<Future<?>> futures = new ArrayList<>();
        for (final Mesh m : meshes) {
            futures.add(executor.submit(new Runnable() {
                @Override
                public void run() {
                    generate(m, true, false);
                }
            }));
        }
        for (Future<?> f : futures) {
            try {
                f.get();
            } catch (Exception exc) {
                log.log(Level.WARNING, "Error while computing tangents", exc);
            }
        }
    }
A private constructor to inhibit instantiation of this class.
jme3-core/src/main/java/com/jme3/util/TangentBinormalGenerator.java