

A lot of and even more
ProcessBuilder class provides a more convenient way to invoke subprocesses
The java.util.concurrent, java.util.concurrent.atomic, and java.util.concurrent.locks packages provide a extensible framework of high-performance, scalable, thread-safe building blocks for developing concurrent classes and applications, including thread pools, thread-safe collections, semaphores, a task scheduling framework, task synchronization utilities, atomic variables, and locks. Additionally, these packages provide low-level primitives for advanced concurrent programming which take advantage of concurrency support provided by the processor, enabling you to implement high-performance, highly scalable concurrent algorithms in Java to a degree not previously possible without using native code. For more information, refer to JSR 166 .
Thread priority handling has changed.
Thread.State enum class and the new getState() API are provided for querying the execution state of a thread.
The new thread dump API - the getStackTrace and getAllStackTraces methods in the Thread class - provides a programmatic way to obtain the stack trace of a thread or all threads.
The uncaughtExceptionHandler mechanism, previously available only through the ThreadGroup class, is now available directly through the Thread class.
A new form of the sleep() method is provided which allows for sleep times smaller than one millisecond.
Security
Enhancements to the Java Kerberos implementation, including TGT renewal and support for Triple DES encryption
Internationalization
4.0 of the Unicode standard. This affects the Character and String classes
An interpreter for printf-style format strings
Scanner
Since it is based on the java.util.regex package, it also offers a way to conduct regular expression based searches on streams, file data, strings, or implementors of the Readable interface.