Thread
类或实现 Runnable
接口:创建一个自定义线程类,可以通过继承 Thread
类或实现 Runnable
接口来实现。继承 Thread
类时,需要重写 run()
方法,该方法包含线程执行的代码。实现 Runnable
接口时,需要实现 run()
方法,然后将 Runnable
对象作为参数传递给 Thread
类的构造函数。// 继承 Thread 类 class MyThread extends Thread { public void run() { // 线程执行的代码 } } // 实现 Runnable 接口 class MyRunnable implements Runnable { public void run() { // 线程执行的代码 } }
ExecutorService
和线程池:Java 提供了 ExecutorService
接口和相关的实现类(如 ThreadPoolExecutor
),用于管理和控制线程的执行。使用线程池可以提高应用程序的性能和响应速度,因为它可以重用已创建的线程,而不是为每个任务创建一个新线程。ExecutorService executorService = Executors.newFixedThreadPool(5); // 创建一个固定大小的线程池 executorService.execute(new MyRunnable()); // 提交任务到线程池 executorService.shutdown(); // 关闭线程池
Future
和 Callable
:Java 提供了 Future
接口和 Callable
接口,用于获取异步任务的结果。Future
表示异步计算的结果,而 Callable
接口允许返回一个结果值。使用 ExecutorService
的 submit()
方法可以提交一个 Callable
或 Runnable
任务,并返回一个 Future
对象。ExecutorService executorService = Executors.newFixedThreadPool(5); Future<Integer> future = executorService.submit(new MyCallable()); // 提交一个 Callable 任务 Integer result = future.get(); // 获取任务的结果 executorService.shutdown();
synchronized
关键字、Lock
接口、Semaphore
类、CountDownLatch
类等,用于解决多线程编程中的数据同步和协作问题。总之,Java 支持多线程编程,并提供了丰富的 API 和工具来帮助开发人员轻松地实现多线程应用程序。