时间会让我们更好。   

Java线程基础(一)

线程安全

B站配套视频讲解:1.Java线程基础(一)

1.1 线程安全

1.1.1 概念

当多个线程访问某一个类(对象或方法)时,这个类始终都能表现出正确的行为,那么这个类(对象或方法)就是线程安全的。

1.1.2 synchronized

可以在任意对象及方法上加锁,而加锁的这段代码称为互斥区临界值

cn.rumoss.study.threadsafe01.SychronizedDemo分析总结:

  • 当多个线程访问SychronizedDemo的run方法时,以排队的方式进行处理(这里排队是按照CPU分配的先后顺序而定的),一个线程想要执行synchorized修饰的方法里的代码,首先尝试获得锁:

    • 如果拿到锁,执行synchronized代码体的内容
    • 如果拿不到锁,这个线程就会不断地尝试获得这把锁,直到拿到为止,而且是多个线程同时去竞争这把锁(也就是会有锁竞争的问题)

1.2 多个线程多个锁

1.2.1 概念

多个线程,每个线程都可以拿到自己指定的锁,分别获得锁之后,执行synchronized方法体的内容。

cn.rumoss.study.threadsafe01.MultiThreadMultiLockDemo分析总结:

  • 关键字synchronized取得的锁都是对象锁,而不是把一段代码(方法当做锁),所以Demo中哪个线程先执行synchronized关键字的方法,哪个线程就持有该方法所属对象的锁(Lock),两个对象,线程获得的就是两个不同的锁,它们之间互不影响
  • 还要一种情况是相同的锁,即在静态方法上加synchronized关键字,表示锁定.class类,类级别的锁(独占.class类)