In my project I have a class extending a JFrame. It exposes some methods wich are used by many threads. I am wondering what is the best approach between these two in order to avoid concurrency issues:
public synchronized void doStuff1(final String arg) {
        /*
         * do stuff synchronized...
         */
    }
    public synchronized void doStuff2(final String arg) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                /*
                 * do stuff invoke later...
                 */
            }
        });
    }
Wich one is the most performing?