java多线程,wait、notify、synchronized

    线程,多任务并行工作,假设把人是比喻成进程的话,比如你在一边听歌,一边写代码、一边保佑佛主永无bug,那恭喜你,你这是在同时做三件事情。

    在java多线程处理中,经常看到或用到wait、notify、synchronized,这三者分析是什么意思呢?

    wait和notify:举例,比如你同时在听歌、码代码、保佑佛主时,突然发现今天的任务可能完不成,于是你先暂停保佑(wait),等发布前再保佑也来的及,于是你专心起来,只同时做两件事了。过了一会,突然看到老大过来了(这个老大对上班听歌很敏感),这时你又暂停了音乐(wait),这时你只专心码代码,终于到凌晨1点,代码完成并提交,这时你又打开音乐,同时保佑下佛主明天的结果肯定顺利(notifyAll)。


  synchronized:多任务时,有时每个任务需要使用共同的数据,这时在若有任务需要操作此数据时,必须确保在操作时只能一个任务在进行,其它任务若想同步操作,只能排队,为了使用数据变更后让其它任务可以即看到(即可见性),在java中需要修饰volatile到此数据。


  volatile:数据更新可使主内存立即可见,为什么会有它,为了提升性能,java中每个线程都有自己的缓存,缓存数据与主内存数据在同一时刻并不能保证相同。

  volatile虽然可以保证可见性和有序性,但不能保证原子性。在多线程并发中,若是同时进行读写操作或线程让位时,将出现严重Bug。所以为了保证咱们的代码安全,可以尝试使用synchronized或锁的机制,这样可避免出现坏结果


参考:Java并发编程:volatile关键字解析


java,并发,多线程 | 2018-05-20 09:19:49