Java中创建线程的方式有以下几种:
- 继承Thread类:自定义一个继承自Thread类的线程类,重写其run()方法,创建该类的实例并调用start()方法启动线程。
- 实现Runnable接口:自定义一个实现了Runnable接口的类,重写其run()方法,将该类的实例作为参数传入Thread类的构造函数中,并调用start()方法启动线程。
- 实现Callable接口:自定义一个实现了Callable接口的类,重写其call()方法,创建该类的实例,并将该实例作为参数传入FutureTask类的构造函数中,再将FutureTask实例作为参数传入Thread类的构造函数中,最后调用start()方法启动线程。
- 使用线程池:创建一个线程池,将需要执行的任务提交到线程池中,线程池会自动分配线程来执行任务。
其中,第三种方式可以获取线程执行后的返回值,而前两种方式则无法获取线程执行后的返回值。另外,使用线程池可以更好地控制线程的数量和生命周期,减少线程的创建和销毁,提高性能。