package 对象及变量的并发访问2;
/**
* synchronized代码块之间的同步性
*
* 在使用同步synchronized(this)代码块时,需要注意,当一个线程访问object的一个synchronized(this)同步代码块时,其他线程
* 对同一个object中所有其他synchronized(this)同步代码块的访问将被阻塞,这说明synchronized使用的对象监视器是同一个,即使用
* 的锁是同一个。
*/
class ObjectServiceT2250{
public void serverMethodA(){
try {
synchronized (this){
System.out.println("A begin time="+System.currentTimeMillis());
Thread.sleep(2000);
System.out.println("A end time="+System.currentTimeMillis());
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void serviceMehodB(){
synchronized (this){
System.out.println("B begin time="+System.currentTimeMillis());
System.out.println("B end time="+System.currentTimeMillis());
}
}
}
class MyThreadAT2250 extends Thread{
private ObjectServiceT2250 objectServiceT2250;
public MyThreadAT2250(ObjectServiceT2250 objectServiceT2250){
super();
this.objectServiceT2250=objectServiceT2250;
}
@Override
public void run() {
super.run();
objectServiceT2250.serverMethodA();
}
}
class MyThreadBT2250 extends Thread{
private ObjectServiceT2250 objectServiceT2250;
public MyThreadBT2250(ObjectServiceT2250 objectServiceT2250){
super();
this.objectServiceT2250=objectServiceT2250;
}
@Override
public void run() {
super.run();
objectServiceT2250.serviceMehodB();
}
}
class RunT2250{
public RunT2250(){
ObjectServiceT2250 objectServiceT2250=new ObjectServiceT2250();
MyThreadAT2250 at2250=new MyThreadAT2250(objectServiceT2250);
at2250.setName("A");
at2250.start();
MyThreadBT2250 bt2250=new MyThreadBT2250(objectServiceT2250);
bt2250.setName("B");
bt2250.start();
}
}
public class T2205 {
public static void main(String[] args) {
RunT2250 runT2250=new RunT2250();
}
}
synchronized代码块之间的同步性——T2205
最新推荐文章于 2021-10-23 21:53:08 发布