作用
解释多线程条件下同步工作的
没有同步
一个方法有多条执行语句,在多个线程调用该方法情况下,当线程A执行方法过程中,未执行完。线程B获取CUP执行权限,线程A停止执行,线程B开始执行。当线程A再次拿到CPU权限时,继续执行未完成的语句。不同步会造成线程单次执行不完全的情况。
同步
同步后,线程A执行完之后,线程B才能执行。
锁(权限 )和synchronized关系
锁是java中实现同步的权限。
只有拿到锁的线程,才能执行synchronized修饰的方法或代码块。其他线程获取锁的唯一方法是,synchronized修饰的方法或代码块执行完,释放锁。
synchronized用法
用于方法
class A{
//关键字修饰在该方法前
//修饰方法:一种静态方法,一种非静态方法
//静态方法:所有对象共用一个方法
synchronized public static void A(string i){
}
//非静态方法:每个对象调用各自的方法。
synchronized public void B(){
}
}
用于代码块
class A{
public static void test(){
//对类表示同步
synchronized(A.class){
system.out.print("1");
}
}
public void test02(){
//对象同步
synchronized(this){
system.out.print("2");
}
}
}
锁的种类
类锁
加锁静态方法,即类锁。静态方法其实就是类方法,所以加锁静态方法,即类锁。类锁的范围是整个实体类,即全局锁 。
对象锁
加锁非静态方法,即对象锁。。synchronized修饰非静态方法、同步代码块的synchronized (this)用法和synchronized (非this对象)的用法锁的是对象 。