Java创建线程主要有三种方式:继承Thread类、实现Runnable接口、使用Callable和FutureTask;前两种最常用,第三种适用于需获取执行结果的场景;实际开发推荐Runnable配合线程池使用。
Java中创建线程主要有三种方式:继承Thread类、实现Runnable接口、使用Callable和FutureTask。其中前两种最常用,第三种适用于需要获取执行结果的场景。
通过自定义类继承Thread,重写run()方法,在其中编写线程要执行的逻辑,然后调用start()启动线程。
Thread后无法再继承其他类run()是普通方法,直接调用不会开启新线程;必须调用start()才真正启动线程定义一个类实现Runnable接口,实现run()方法,再将其实例传入Thread构造器,最后调用start()。
Runnable实例Callable接口与Runnable类似,但call()方法可以有返回值,并能抛出受检异常。FutureTask是Runnable和Future的实现类,可包装Callable对象并提交给线程执行。
Thread构造器,需通过FutureTask适配ExecutorService中,如submit(Callable)返回Future
虽然不算“原始创建方式”,但实际项目中应优先使用ExecutorService(如Executors.newFixedThreadPool())来管理线程。它复用线程、控制并发数、避免频繁创建销毁开销。
Runnable或Callable任务,由线程池统一调度new Thread().start()更安全、高效、可控Future可灵活管理异步任务生命周期不复杂但容易忽略:无论哪种方式,都要注意线程安全
问题,尤其是共享变量的访问控制。