Software implementations of random number generators generate deterministic and periodic sequences of numbers. Thus such sequences can be hardly called random. In fact, such implementations just imitate randomness. Wording pseudo-random accentuates deterministic nature of a sequence rather than emphasizes bad random properties of the generator.
There are many software implementations of random number generators, and it's impossible to recommend particular RNG as the best one. All RNGs differ in their properties (period length, speed, uniformity measures like equidistribution and discrepancy as well as ... unpredictability). I would say that user application defines requirements to RNGs. For instance, some Monte Carlo methods (like MC integration) require just filling a space of required dimension as even as possible and don't require independence between random vectors. There are generators specially designed for such purposes. They are called quasi-random number generators.
For majority of applications utilizing random numbers it's sufficient to use pseudorandom number generators. In contrast to quasi-random ones they imitate independence as well. I would recommend trying pseudo-or quasi-random number generator solutions from Intel Math Kernel Library. In particular, MKL provides comprehensive documentation discussing RNG applicability aspects, theoretical properties, performance measurement results and empirical testing results for each RNG available in MKL. Perhaps you can find there something applicable to you.
If Java implementations are the most preferable to you, however, I would recommend following links:
1) One of the best pseudo-random number generators (Mersenne Twister)http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html
(Java versions of the generator can be found athttp://www.cs.umd.edu/users/seanl/gp/, http://www.spaceroots.org/downloads.html).
2) You may want to look at Java package RngPack. It has some RNGs including Mersenne Twister (http://www.honeylocust.com/RngPack/).
3) You may find also interesting links athttp://www.cs.berkeley.edu/~daw/rnd/.
One of RNG properties might be important (i.e. in cryptography) is unpredictability of the output. This means that without knowledge about RNG algorithm and looking only on previously generated output an observer cannot predict next number with probability higher than 50%. Unfortunately there is no proven algorithm satisfying such a requirement. Output of most of pseudo-random number generators can be _relatively_ easy predicted.
Regarding to true randomness. There are specially designed physical devices which output is a combination of an analog noise and a deterministic algorithm. I would recommend following linkhttp://www.intel.com/design/chipsets/rng/CRIwp.pdf. But those generators may have some shortcomings (e.g an absence of reproducibility of a sequence).
A little bit more about "true" randomness. Pseudorandom number generators can be rather unpredictable if you will reinitialize them from time to time using processor clock. The only recommendation is to do this relatively rare (much rarely than the rate of a processor clock).