synchronized使用

Posted gaochenglong1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了synchronized使用相关的知识,希望对你有一定的参考价值。

一、同步多线程

同步多线程是一种在一个CPU的时钟周期内能够执行来自多个线程的指令的硬件多线程技术。

线程同步控制:对多个线程共享的资源(的)状态进行的统一性控制。

二、关键字synchronized(同步)

同步的本质:

当线程调用时,资源(对象)会加锁的,当用完资源后,锁在打开。意味着同一时刻,只有一个线程可以使用方法。

synchronized块

private Object lock1 = new Object(); //成员变量的锁

private Object lock2 = new Object(); //成员变量的锁

public int getMoney1()

//多个方法用同一把锁,多个方法一起排队

        synchronized(lock1)

public int getMoney2()

//多个方法用同不同锁,各个方法单独排队

        synchronized(lock2 )

synchronized不仅可以修饰方法,也可以修饰块。这两者的区别:

修饰方法是给对象(Class)加锁,如果有两个方法同步,则不能同时执行;

修饰块是给方法加锁,指同一个方法间的排队。

修饰方法时,只能用一个方法运行(排队)

如果两个方法用一把锁,那么两个方法只能一个进行;

如果两个方法不用同一把锁,那么两个方法互不影响,都可进行。

注:小面试题

private static Object lock1 = new Object();

//成员变量的锁

public synchronized static void abc()

        //这个锁的为.class的类文件

public synchronized void abc()

        //这个锁的是new的类对象

三、ReentrantLock类

一个可重用的互斥锁,实现Lock接口。Lock接口实现提供了比使用synchronized方法和语句可获得的更广泛的锁定操作。(可以取代synchroized关键字)

Lock的方法 lock(); //使用锁 unLock(); //解锁

代码举例:

private final ReentrantLock lock = new ReentrantLock();

//方法

public int getMethod()

this.lock.lock();

//上锁

        try

                //业务代码

        finally

                //解锁

                this.lock.unlock();

        

四、java线程通信

基本概念:对被多个线程共享(共同使用、共同操作)的资源(对象),(由资源本身(这个对象))分配线程之间操作的调节与控制。

共享资源对象的方法:(注:不是线程的方法,是Object的方法)

1.wait(); //调用此对象的方法,使线程等待

2.notify(); //调用此对象的方法,唤醒一个线程

2.notifyAll(); //调用此对象的方法,唤醒所有线程

以上是关于synchronized使用的主要内容,如果未能解决你的问题,请参考以下文章

并发编程synchronized的使用场景和原理简介

Synchronize深入

五、synchronized

11JUC--线程八锁

synchronized的使用方法

7.synchronized锁的应用