Java提供了多种方式来实现并发,常用的包括:
- 继承Thread类:定义一个继承自Thread类的子类,在子类中重写run()方法,并在主函数中创建该子类的对象并调用start()方法来启动线程。
- 实现Runnable接口:定义一个实现了Runnable接口的类,在类中重写run()方法,并在主函数中创建该类的对象并将其作为参数传递给Thread类的构造方法,最后调用start()方法来启动线程。
- 实现Callable接口:定义一个实现了Callable接口的类,在类中重写call()方法,并创建一个FutureTask对象,将其作为参数传递给Thread类的构造方法,最后调用start()方法来启动线程。
- 使用线程池:使用java.util.concurrent包下的Executor框架来创建线程池,将任务提交给线程池,线程池会自动调度执行任务的线程。
- 使用synchronized关键字:使用synchronized关键字来保证多个线程之间的同步,避免线程间的竞争和冲突。
- 使用Lock锁:使用java.util.concurrent.locks包下的Lock接口和ReentrantLock类来保证多个线程之间的同步,避免线程间的竞争和冲突。
以上是常见的几种Java实现并发的方法,每种方法都有其适用的场景和优缺点,开发者需要根据具体的需求来选择合适的方式。