Java 线程怎么创建
你平时用手机刷短视频、用电脑写文档的时候,其实电脑里有很多“小任务”在同时干活——比如短视频在播放、缓存、加载评论,这些“小任务”在编程里就叫“线程”。Java作为常用的编程语言,它创建线程的方法有几种,咱们用生活化的例子慢慢说。
第一种:继承Thread类,就像给任务“派专属工人”
假设你要装修房子,想让瓦工和电工同时干活,你可以先给每个工种配专属工人。在Java里,Thread类就相当于“工人模板”,你只要写个类继承它,再把要做的事写进去就行。

举个例子,你想让程序同时打印“早上8点”和“上班打卡”,可以这么做:
先写一个继承Thread的类,把打印“上班打卡”的代码放进去,这个类的对象就是“干活的工人”;另一个类继承Thread,放打印“早上8点”的代码。最后把两个工人都叫出来,让他们同时开工,就能看到两个时间同时显示,而不是先打完卡再看时间。
这里要注意一个小细节:必须调用start()方法,而不是直接run()。如果直接写run(),就像让一个工人先做完瓦工的活再做电工的活,变成了“单线程”,不是真正的同时干活。
第二种:实现Runnable接口,就像给任务“派共享工人”
有时候你不想给每个任务都做一个专属工人,比如装修时的“搬瓷砖”“递工具”,可以让多个工种的工人一起干这些杂活。Runnable接口就是“共享任务模板”,把要做的事写在这个接口的方法里,然后交给Thread对象去执行。
还是用刚才的例子:把打印“早上8点”和“上班打卡”的代码都写进同一个Runnable类里,这个类就像一个“任务清单”。然后创建两个Thread对象,都拿着这个任务清单,这样就相当于两个工人同时拿同一份任务清单干活,也能实现同时打印。
这种方法比继承Thread类更灵活,因为Java里一个类只能继承一个父类,要是你已经继承了别的类,就不能再继承Thread了,用Runnable就没问题——就像你已经是“装修工头”(有自己的“父角色”),还能接多个装修任务,不用再做新的工头。
第三种:用Callable和Future,就像给任务“要结果”
刚才两种方法的线程都是“只管干活,不管回报”,但有时候你需要线程做完事给个反馈,比如让线程算“1+2+…+100”的和,你得拿到这个结果才能继续干活。这时候就要用Callable和Future了。
比如你让一个线程算1到100的和,另一个线程算1到50的和,最后把两个结果加起来。Callable接口就是“带结果的任务”,你要指定结果的类型(比如整数),把计算代码写进去。然后用Future对象接收线程返回的结果,等两个线程都算完,把结果合并就行。
这种方法适合需要返回值的场景,就像你让两个工人各算一笔账,最后把账加起来总核对,比前面两种方法多了“拿结果”的步骤。
选哪种方法更合适?
如果只是简单的小任务,比如同时打印几句话,用前两种方法就行;如果需要返回结果,就用Callable和Future。另外,现在Java 5之后还有线程池,但那是“管工人的车间”,是管理线程的工具,不是创建线程的直接方法,咱们先把创建的基础方法搞懂,再学更高效的管理方式。