一.同步与死锁
同步是指多个操作在同一个时间段内只能有一个线程进行,其它线程要等到此线程之后才能继续执行,如下图:
同步是来解决多个线程同一时间段访问同一资源可能出现问题的。
解决资源共享的同步操作,可以使用同步代码块和同步方法二种方式完成。如下图:
其中同步对象可将当前对象(this)设置为同步对象。
Java中方法定义完整格式如上。
死锁就是指二个线程都等待彼此先完成,造成了程序的停滞,一般程序的死锁都是在程序运行时出现的。
如上图,张三想要李四的画,李四想要张三的书,但他们又不肯先给对方,这样就会一直僵持下去,这就是死锁。
多个线程共享同一资源时需要同步,以保证资源操作的完整性,但过多的同步会导致死锁。
二.生产者与消费者
生产者不断生产,消费者不断取走生产者生产的产品,如图:
因为线程运行的不稳定性,这样会产生二个问题:
第一:信息错乱,即生产者刚添加了信息名称还没添加信息内容,结果就到了消费者线程,而消费者将信息名称和上一条信息内容联系到一起。
第二:信息重复,消费者取完一个数据后还没有等生产者放入信息,又重复取刚刚取过的信息。
解决问题一可以加入同步。
解决问题二需要加入等待和唤醒。
上图为Object()类的方法。
上图为生产者,消费者的流程图。