12

Java 多线程学习——Synchronize

 3 years ago
source link: https://suiyia.github.io/2019/10/14/Java-%E5%A4%9A%E7%BA%BF%E7%A8%8B%E5%AD%A6%E4%B9%A0%E2%80%94%E2%80%94Synchronize/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Java 多线程学习——Synchronize

2019-10-14 Java 多线程 28 评论 字数统计: 535(字) 阅读时长: 1(分)

多线程虽然能够一定程度上解决高并发请求的问题,但是利用多线程进行开发,首先要保证的就是线程安全。

  • 线程安全:无论在单线程还是多线程的情况下,业务代码输出结果不变。

  • 同步:要实现线程安全,就需要同步,即依靠认为的调度和控制,使得业务代码按照人们意向的方向进行。

关于 Synchronized 的一些概念

  • 对象锁:在 Java 中,每个对象都会有一个 monitor 对象,这个对象其实就是 Java 对象的锁,通常会被称为“内置锁”或“对象锁”。类的对象可以有多个,所以每个对象有其独立的对象锁,互不干扰。

  • 类锁:在 Java 中,针对每个类也有一个锁,可以称为“类锁”,类锁实际上是通过对象锁实现的,即类的 Class 对象锁。每个类只有一个 Class 对象,所以每个类只有一个类锁。

Synchronized 用法

  • this、object(对象锁)
  • 类.class(类锁)
  • 方法(对象锁)
  • 静态方法(类锁)

生产者消费者

java多线程同步(wait、notify)生产者消费者简单示例

  • 无论 synchronized 关键字加在方法上还是对象上,如果它作用的对象是非静态的,则它取得的锁是对象;如果synchronized作用的对象是一个静态方法或一个类,则它取得的锁是对类,该类所有的对象同一把锁。

  • 同一个类的不同对象的对象锁互不干扰

  • 对象锁和类锁是独立的,互不干扰

  • synchronized 关键字不能继承,父类中的 synchronized 修饰方法,子类在覆盖该方法时,默认情况下不是同步的,必须显示的使用 synchronized 关键字修饰才行。

  • 关键字 synchronize 拥有锁重入的功能,也就是在使用 synchronize 时,当一个线程的得到了一个对象的锁后,再次请求此对象是可以再次得到该对象的锁。

Java 之 synchronized 详解

Java中Synchronized的用法


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK