java 中 synchronized 是什么意思
发布网友
发布时间:2022-05-02 04:06
我来回答
共2个回答
热心网友
时间:2022-06-28 01:31
任何的java元素都包含在类里边,对于任何的类,编译之后都对应了一个相应的.class文件,同时java也定义了class类,它的实例对应各种class文件,也就是说string.class是class类的一个实例,object.class也是class的一个实例……。至于xx.class显然是一个class的实例,而不是一个类。synchronized
(xxx.class)和synchronized(this)这样的语句在语法上是同一类型的,只不过后者锁的是当前对象,而前者锁的是class的一个实例xxx.class。
热心网友
时间:2022-06-28 01:31
一段synchronized的代码被一个线程执行之前,他要先拿到执行这段代码的权限,在java里边就是拿到某个同步对象的锁(一个对象只有一把锁);
如果这个时候同步对象的锁被其他线程拿走了,他(这个线程)就只能等了(线程阻塞在锁池等待队列中)。
取到锁后,他就开始执行同步代码(被synchronized修饰的代码);线程执行完同步代码后马上就把锁还给同步对象,其他在锁池中等待的某个线程就可以拿到锁执行同步代码了。这样就保证了同步代码在统一时刻只有一个线程在执行。
关于线程的同步,一般有以下解决方法:
1.
在需要同步的方法的方法签名中加入synchronized关键字。
2.
使用synchronized块对需要进行同步的代码段进行同步。
3.
使用JDK
5中提供的java.util.concurrent.lock包中的Lock对象