码迷,mamicode.com
首页 > 其他好文 > 详细

synchronized的对象锁和类锁

时间:2019-12-18 11:16:10      阅读:92      评论:0      收藏:0      [点我收藏+]

标签:安全   对象   获得   his   trace   static   最新   over   string   

概念

synchronized 是 Java 中的关键字,是利用锁的机制来实现同步的。

锁机制有如下两种特性:

  • 互斥性:即在同一时间只允许一个线程持有某个对象锁,通过这种特性来实现多线程中的协调机制,这样在同一时间只有一个线程对需同步的代码块(复合操作)进行访问。互斥性我们也往往称为操作的原子性。

  • 可见性:必须确保在锁被释放之前,对共享变量所做的修改,对于随后获得该锁的另一个线程是可见的(即在获得锁时应获得最新共享变量的值),否则另一个线程可能是在本地缓存的某个副本上继续操作从而引起不一致。

对象锁

synchronized修饰非静态方法时是对象锁,等同于synchronized(this),在同一个对象中是线程安全的。

package com.dwz.concurrency.chapter7;
/**
 *     两个方法锁定的都是this即同一个对象thisLock,
 *     同时调用的结果是一个执行完再执行下一个
 */
public class SynchronizedThis {
    public static void main(String[] args) {
        ThisLock thisLock = new ThisLock();
        new Thread("T1") {
            @Override
            public void run() {
                thisLock.m1();
            }
        }.start();
        
        new Thread("T2") {
            @Override
            public void run() {
                thisLock.m2();
            }
        }.start();
    }
}

class ThisLock {
  public synchronized void m1() { try { System.out.println(Thread.currentThread()); Thread.sleep(10_000); } catch (InterruptedException e) { e.printStackTrace(); } } public synchronized void m2() { try { System.out.println(Thread.currentThread()); Thread.sleep(10_000); } catch (InterruptedException e) { e.printStackTrace(); } } }

 执行结果:m1和m2先后执行

synchronized的对象锁和类锁

标签:安全   对象   获得   his   trace   static   最新   over   string   

原文地址:https://www.cnblogs.com/zheaven/p/12058497.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!