Executor is an interface. So you are asking a question about all of the possible classes that might ever implement it. Besides, for each of them the question mostly boils down to whether the Runnable being executed is thread-safe. So I would say the answer is "Don't count on it."
Assuming that all my Runnable(s) are thread-safe, then I gather from your answer that I will still need to synchronized access to invocations of Executor.execute( Runnable ). Thanks.
Executor.execute( Runnable ) is not a blocking call. It will execute your task sometime later. So, synchronized access to its invocation would not help. I think if your Runnable instances are using shared resources and they are thread-safe then you do not need to worry about anything in the world but if they are not thread-safe and they are accessing shared resources then you should make them thread-safe. There is no middle-path