Java多线程之锁怎么使用

其他教程   发布日期:2023年07月13日   浏览次数:453

本篇内容介绍了“Java多线程之锁怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

首先强调一点:Java多线程的锁都是基于对象的,Java中的每一个对象都可以作为一个锁。同时,类锁也是对象锁,类是Class对象

Java8锁

核心思想

关键字在实例方法上,锁为当前实例

关键字在静态方法上,锁为当前Class对象

关键字在代码块上,锁为括号里面的对象

在进行线程执行顺序的时候,如果添加了线程睡眠,那么就要看锁的对象是谁,同一把锁 / 非同一把锁是不一样的

Synchronized

synchronized 是Java提供的关键字,用来保证原子性的

synchronized的作用域如下

  • 作用在普通方法上,此方法为原子方法:也就是说同一个时刻只有一个线程可以进入,其他线程必须在方法外等待,此时锁是对象

  • 作用在静态方法上,此方法为原子方法:也就是说同一个时刻只有一个线程可以进入,其他线程必须在方法外等待,此时锁是当前的Class对象

  • 作用在代码块上,此代码块是原子操作:也就是说同一个时刻只有线程可以进入,其他线程必须在方法外等待,锁是 synchronized(XXX) 里面的 XXX

先看一段简单的代码

  1. public class SynchronizedTest {
  2. public static void main(String[] args) {
  3. test1();
  4. test2();
  5. }
  6. // 使用synchronized修饰的方法
  7. public synchronized static void test1() {
  8. System.out.println("SynchronizedTest.test1");
  9. }
  10. // 使用synchronized修饰的代码块
  11. public static void test2() {
  12. synchronized (SynchronizedTest.class) {
  13. System.out.println("SynchronizedTest.test2");
  14. }
  15. }
  16. }

执行之后,对其进行执行javap -v命令反编译

  1. // 省略

以上就是Java多线程之锁怎么使用的详细内容,更多关于Java多线程之锁怎么使用的资料请关注九品源码其它相关文章!