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使用的主要内容,如果未能解决你的问题,请参考以下文章