Java多线程总结(二)

一.同步与死锁

同步是指多个操作在同一个时间段内只能有一个线程进行,其它线程要等到此线程之后才能继续执行,如下图:
图一
同步是来解决多个线程同一时间段访问同一资源可能出现问题的。
解决资源共享的同步操作,可以使用同步代码块和同步方法二种方式完成。如下图:
图二
图三
其中同步对象可将当前对象(this)设置为同步对象。
图四
Java中方法定义完整格式如上。

死锁就是指二个线程都等待彼此先完成,造成了程序的停滞,一般程序的死锁都是在程序运行时出现的。
图五
如上图,张三想要李四的画,李四想要张三的书,但他们又不肯先给对方,这样就会一直僵持下去,这就是死锁。

多个线程共享同一资源时需要同步,以保证资源操作的完整性,但过多的同步会导致死锁。

二.生产者与消费者

生产者不断生产,消费者不断取走生产者生产的产品,如图:
图六
因为线程运行的不稳定性,这样会产生二个问题:
第一:信息错乱,即生产者刚添加了信息名称还没添加信息内容,结果就到了消费者线程,而消费者将信息名称和上一条信息内容联系到一起。
第二:信息重复,消费者取完一个数据后还没有等生产者放入信息,又重复取刚刚取过的信息。

解决问题一可以加入同步。

解决问题二需要加入等待和唤醒。
图七
上图为Object()类的方法。

图八

上图为生产者,消费者的流程图。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值