1) Packages in Java are used to organize classes and interfaces into logical groups. They provide access protection and prevent naming collisions. There are built-in packages provided by Java as well as user-defined packages that can be created.
2) Multithreading allows multiple tasks to be performed simultaneously by executing threads in parallel. Threads are lightweight subprocesses that can execute concurrently, improving performance. The main threading constructs in Java are the Thread class and Runnable interface.
3) Synchronization in Java controls access to shared resources by multiple threads. The synchronized keyword is used to prevent interference and consistency issues when threads access the same code or data concurrently.