Java 线程有几种创建方式

你是不是经常看到代码里同时跑着好几件事,比如手机一边放音乐一边聊微信,这在编程里就是“多线程”的功劳。而Java作为常用的编程语言,线程是它实现多任务的核心,很多新手刚接触时会问:Java里创建线程到底有几种办法?其实这个问题不用记复杂术语,跟着生活化的例子一步步看就懂。

第一种:最简单的——直接“找个跑腿的”

想象你是公司老板,要让员工小甲单独去买咖啡,不用给小甲分配新任务,直接让他“单独跑一趟”就行。对应到Java里,就是直接写一个类,继承自带的Thread类,把要做的事写在run()方法里,最后创建这个类的对象,调用start()启动线程。

Java 线程有几种创建方式

举个例子:你写了个类MyCoffeeRunner继承Thread,run()里写“买咖啡”的代码,创建MyCoffeeRunner runner = new MyCoffeeRunner();,再写runner.start();,这样买咖啡的事就会单独跑,不会耽误你做其他事。这是最基础的方法,就像给员工派个独立的小任务。

第二种:更灵活的——“找个兼职的”

如果员工小甲本来在做别的事,你不想让他改岗位,只是临时借他的时间买咖啡,这时候就不用继承Thread,而是让这个员工实现Runnable接口,把“买咖啡”的事装进去,再把这个任务“交给”专门跑腿的人去做。

Java里的操作是:写一个类实现Runnable,把要做的事写在run()里,再创建Thread对象,把这个任务对象传进去,最后调用start()。这种方法比第一种灵活,比如你有好几个任务,都可以用同一个Runnable对象,就像同一个兼职可以帮你买咖啡、取快递,不用重新找不同的人。

第三种:省事儿的——“打包任务一起派”

有时候你不想手动创建线程,想让系统帮你管线程,比如同时派10个任务,系统自动安排空闲的线程去做,这就用到了“线程池”,也就是第三种创建线程的方式。

举个生活化的例子:你开了个奶茶店,雇了3个员工(线程池里的3个线程),同时有5个客人点单(5个任务),系统会安排1个员工做第1杯,1个做第2杯,剩下3杯等着员工空了再做,不用你每次喊“去做奶茶”。Java里用ExecutorService就能实现,比如ExecutorService pool = Executors.newFixedThreadPool(3);,再用pool.submit(任务);,系统自动分配线程,适合任务多的情况,不会浪费资源。

第四种:未来的——“异步带结果的任务”

有时候你派员工去买咖啡,还需要带回来找零,这时候普通的跑腿就不够,得要“有返回值的任务”,对应Java里的Callable和Future。

比如你让员工买咖啡,要回来“咖啡+5元找零”的结果,Callable就是带返回值的任务类,写在call()方法里,把任务交给线程后,用Future对象等结果。就像你等员工把咖啡和找零拿回来再结账,不会不知道最后拿到什么。

可能有人会问,这么多方法,到底用哪个?其实选方法看需求:只做简单任务用继承Thread;想灵活复用任务用Runnable;任务多要省资源用线程池;需要结果用Callable。不用死记硬背,下次写代码时,根据自己的需求选对应的方式就好。

上一篇 Swift编程语言核心特性与应用场景的知识科普详解