多线程编程 实战篇 (一)

本文介绍了多线程编程的安全性、可行性和高性能原则,并通过一个厨师-食客模式的实战例子,展示了如何实现生产者-消费者模式。在该模式中,多个厨师(生产者)制作食物并放入有限容量的桌子(仓库),多个食客(消费者)从桌子上取食物。通过同步方法`putFood`和`getFood`确保对桌子的访问安全,避免了线程竞争。同步范围仅限于实际存在竞争的操作,以提高程序性能。
摘要由CSDN通过智能技术生成
实战篇(一) 


在进入实战篇以前,我们简单说一下多线程编程的一般原则.

[安全性]是多线程编程的首要原则,如果两个以上的线程访问同一对象时,一个线程会损坏
另一个线程的数据,这就是违反了安全性原则,这样的程序是不能进入实际应用的.

安全性的保证可以通过设计安全的类和程序员的手工控制.如果多个线程对同一对象访问不
会危及安全性,这样的类就是线程安全的类,在JAVA中比如String类就被设计为线程安全的类.
而如果不是线程安全的类,那么就需要程序员在访问这些类的实例时手工控制它的安全性.


[可行性]是多线程编程的另一个重要原则,如果仅仅实现了安全性,程序却在某一点后不能继
续执行或者多个线程发生死锁,那么这样的程序也不能作为真正的多线程程序来应用.

相对而言安全性和可行性是相互抵触的,安全性越高的程序,可性行会越低.要综合平衡.

[高性能] 多线程的目的本来就是为了增加程序运行的性能,如果一个多线程完成的工作还不
如单线程完成得快.那就不要应用多线程了.

高性能程序主要有以下几个方面的因素:
    数据吞吐率,在一定的时间内所能完成的处理能力.
    响应速度,从发出请求到收到响应的时间.
    容量,指同时处理雅致同任务的数量.


    安全性和可行性是必要条件,如果达到不这两个原则那就不能称为真正的多线程程序.
而高性是多线程编程的目的,也可以说是充要条件.否则,为什么采用多线程编程呢?


[生产者与消费者模式]
    首先以一个生产者和消费者模式来进入实战篇的第一节.

    生产者和消费者模式中保护的是谁?
    多线程编程都在保护着某些对象,这个些对象是"紧俏资源",要被最大限度地利用,这也是
采用多线程方式的理由.在生产者消费者模式中,我们要保护的是"仓库",在我下面的这个例子中,
就是桌子(table)


    我这个例子的模式完全是生产者-消费者模式,但我换了个名字.厨师-食客模式,这个食
堂中只有1张桌子,同时最多放10个盘子,现在有4个厨师做菜,每做好一盘就往桌子上放(生产者将
产品往仓库中放),而有6个食客不停地吃(消费者消费产品,为了说明问题,他们的食量是无限的).

    一般而言,厨师200-400ms做出一盘菜,而食客要400-600ms吃完一盘.当桌子上放满了10
个盘子后,所有厨师都不能再往桌子上放,而当桌子是没有盘子时,所有的食客都只好等待.


    下面我们来设计这个程序:

    因为我们不知道具体是什么菜,所以叫它food:

    class Food{}

    然后是桌子,因为它要有序地放而且要有序地取(不能两个食客同时争取第三盘菜),所以我们
扩展LinkedList,或者你用聚合把一个LinkedList作为属性也能达到同样的目的,例子中我是用
继承,从构造方法中传入一个可以放置的最大值

    
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值