java并发编程

java并发编程,第1张

1.多线程典型应用场景

1.场景1:工作量太大,需要多人一块儿干,以缩短工期
比如要完成书稿校对工作。


显然一个人校对太慢了,那就多叫几个人吧!每个人分一个章节,同时进行校对,速度一下就上来了。


如下
图所示:

如果程序需要重复执行一段逻辑,每次执行又互不影响,那么你可以考虑多线程,每个线程执行总量的一部分,最后再把每个线程执行的结果合并。


2.场景2:实现分工,协作

饭店一般有收银员、厨师、传菜员、清洁员。


每个人各司其职,大家配合工作。



每种角色的员工只关心自己的输入和输出,比如厨师的输入就是客户的点菜单,输出就是饭菜。


而厨师的输入则是上个环节收银员的输出。


这样做的好处是每个人专注自己的工作,有助于效率的提升。



每个环节都有缓冲,订单的列表就是一个缓冲,调节两个环节速率的不匹配及不稳定。


3.场景3:排队的同时,不耽误做其他事情
比如B超的流程优化,你先去B超排队取号,然后可以先去做其他项目的检查,当快轮到你的时候,短信通知你去做B超。



这其实就是java多线程中的Future模式。


这种模式下,主线程不会因为一个耗时的业务 *** 作而阻塞,主线程可以单起一个线程去处理耗时
的 *** 作,主线程逻辑继续执行,等用到另外线程返回的数据时,再通过Future对象获取。


2.多线程的实现方式

1.继承Thread类
2.实现Runnable接口
3.使用FutureTask
4.使用Executor框架

3.线程安全(重难点)

争夺共享资源,需要加锁同步

4.看若兄弟,实如父子-----Thread和Runnable详解

1.继承Thread类

start方法调用了start0方法,start0是一个native方法(JNI方法),JNI(Java Native Interface)是java和其它语言的交互方式,
start0会调用run方法。


2.实现Runnable接口

Thread类的run方法:

    @Override
    public void run() {
        if (target != null) {
            target.run();
        }
    }

这里的target被设置为你实现业务逻辑的Runnable实现。



java多线程使用了模板方法,Thread负责线程相关的逻辑,业务逻辑则被剥离出来让Runnable的实现类去实现。


5.线程什么时候开始真正执行?----线程的状态详解

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/563456.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-02
下一篇 2022-04-02

发表评论

登录后才能评论

评论列表(0条)

保存