The API says about the availableProcessors() method:
Returns the number of processors available to the Java virtual machine.
This value may change during a particular invocation of the virtual
machine. Applications that are sensitive to the number of available
processors should therefore occasionally poll this property and adjust
their resource usage appropriately.
So it is not guaranteed to be the 8 cores that your system has but rather the number of processors that your JVM can use.
Whether all cores are used also depends on the amount of work that you put in. When you only execute one item of "Work" it will only occupy one thread - sometime in the future. If you need the result I would recommend using a Future.
Workexactly does (for instance some operations won't trigger the hyperthreading scheduler, if you have some IO operations more threads might be better), on which operating system you run it (how many threads are actually used is decided by the JVM and the OS scheduler) and probably several other factors. If I were you I would simply benchmark it a little bit.