为了账号安全,请及时绑定邮箱和手机立即绑定

90% 的人只会一种!Java 多线程创建方式全揭秘

标签:
Java JavaScript

原文来自于:https://zha-ge.cn/java/61

90% 的人只会一种!Java 多线程创建方式全揭秘

讲真,谁还不是平平无奇写着业务的 Java 搬砖工。多线程?还不就是 new Thread 吗?以前我也这么天真,直到某天老板拍着我肩膀:“小赵,这需求做个并发提高下性能,顺便review下老王的线程池实现。”那一刻,我的思维就像 IntelliJ 一样突然卡了一下,我发现我其实只会一种多线程写法……


那些年,我们一起打开过的多线程大门

跟大家说说我第一次写多线程的场景。新手嘛,看到 Thread 这个类,心想不就是继承一下 run() 吗,三下五除二:

class DemoThread extends Thread {
    public void run() {
        System.out.println("线程启动!");
    }
}
new DemoThread().start();

一切漂亮,控制台啪一行字。那时候我还自豪地跟隔壁的 C# 同事聊,“Java 多线程特简单兄弟!”后来才知道人家都用啥线程池了,看我这写法,简直像电动车跟特斯拉。

其实 Java 能创建线程的套路一堆,稍微总结一下,主流的有:

  • 继承 Thread
  • 实现 Runnable
  • 实现 Callable + Future
  • Executor 框架(线程池)
  • Lambda表达式配合各种风骚写法

每种背后其实都有坑,光看个 API 文档根本不懂“爽点”和“雷点”在哪。


踩坑瞬间

分享下两个搞笑时刻。

1. 线程没跑起来!

最早写代码时妄想:
new Thread(new MyRunnable()).run();
然后满心期待。等了半天,啥也没并发出来。对,少写了 .start(),直接 run() 相当于普通方法调用,线程根本没起飞。

2. Callable 返回值我写成了 Runnable

有次想让线程执行完有个返回值,脑子一抽还是实现了 Runnable,才发现它 run 方法只能 void 啊哥!
查了官方文档才晓得,得用 Callable,然后整个 Future 拿结果,不然线程飞了你都不知道它带回来啥。


关键姿势“漏一眼”

就像煮面条要点盐,多线程写法讲究细节,展示下关键代码:

Runnable 实现到底怎么撸?

Runnable task = () -> System.out.println("我是 Runnable 线程!");
new Thread(task).start();

Callable + Future 酱紫用!

Future<Integer> future = executor.submit(() -> {
    // 模拟烧水
    return 42;
});
Integer result = future.get(); // 这里会阻塞等待返回值

线程池真的香

ExecutorService pool = Executors.newFixedThreadPool(3);
pool.execute(() -> System.out.println("线程池的线程"));

这些代码虽然短,可背后的事儿多了去了,参数设置不对,线程卡死你都不知道哪的问题。踩坑朋友十有八九。


经验启示

踩多了坑,也明白了点:

  • new Thread() 真是只适合 Hello World。
  • 线程池是主流,自己管理线程太容易踩雷。
  • Callable 和 Future 搭配用,复杂场景必会。
  • “start” 和 “run” 千万勿搞混,不然 debug 起来你会怀疑人生。
  • Lambda 表达式配 Runnable 功能和优雅兼得!

最后,记得:

“能不动多线程就不动,写多了脑袋发麻。”


收个尾吧兄弟们,线程的花头多得很,写业务能用现成线程池就好,别头铁造新轮子。等你踩过坑、熬过夜,再来回味多线程的种种套路,有种见山不是山的感觉。复习到这,下次别再让别人对你的多线程实现感到好笑了,好吧?

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消