栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Java多线程】

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Java多线程】

文章目录
  • 前言
    • Java多线程通信方式
  • 一、使用 volatile 关键字
  • 二、使用Object类的wait()/notify()
    • synchronized和lock的区别


前言 Java多线程通信方式 一、使用 volatile 关键字

基于volatile关键字来实现线程间相互通信是使用共享内存的思想。大致意思就是多个线程同时监听一个变量,当这个变量发生改变的时候,线程能够感知并执行相应的业务。

二、使用Object类的wait()/notify()

Object类提供了线程间通信的方法:wait()、notify()、notifyAll(),它们是多线程通信的基础。
注:wait/notify 必须配合 synchronized 使用,wait 方法释放锁,notify 方法不释放锁。wait 是指在一个已经进入了同步锁的线程内,让自己暂时让出同步锁,以便其他正在等待此锁的线程可以得到同步锁并运行,只有其他线程调用了notify(),notify 并不释放锁,只是告诉调用过 wait() 的线程可以去参与获得锁的竞争了,但不是马上得到锁,因为锁还在别人手里,别人还没释放,调用 wait() 的一个或多个线程就会解除 wait 状态,重新参与竞争对象锁,程序如果可以再次得到锁,就可以继续向下运行。


synchronized和lock的区别
1、synchronized是Java的关键字,在JVM层面。lock是一个类,接口。
2、synchronized是隐式加锁,lock是显式的加锁。
3、synchronized可以作用在方法和代码块上,而lock只能作用在代码块上。
4、synchronized作用在静态方法上锁的是当前类的class,作用在普通方法上锁的是当前类的对象。
5、synchronized在发生异常的时候会自动释放占有的锁,因此不会出现死锁;
而lock发生异常的时候,不会主动释放占有的锁,必须手动unlock来释放锁,可能引起死锁的发生。
(所以最好将同步代码块用 try catch 包起来,finally中写入unlock,避免死锁的发生)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1005779.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号