美文网首页
2.2.5synchronized代码块间的同步性

2.2.5synchronized代码块间的同步性

作者: 农家男孩 | 来源:发表于2017-07-04 21:32 被阅读0次

在使用同步synchronized(this)代码块时需要注意的是,当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对同一个object中所有其他synchronized(this)同步代码块的访问将被阻塞,这说明synchronized使用的“对象监视器”是一个。

/**
 * @author wuyoushan
 * @date 2017/4/14.
 */
public class ObjectService {
    public void serviceMethodA(){
        try{
            synchronized (this){
                System.out.println("A begin time="+System.currentTimeMillis());
                Thread.sleep(2000);
                System.out.println("A end    end="+System.currentTimeMillis());
            }
        }catch (InterruptedException e){
            e.printStackTrace();
        }
    }
    public void serviceMethodB(){
        synchronized (this){
            System.out.println("B begin time="+System.currentTimeMillis());
            System.out.println("B end    end="+System.currentTimeMillis());
        }
    }
}

/**
 * @author wuyoushan
 * @date 2017/4/4.
 */
public class ThreadA extends Thread{

    private ObjectService objectService;

    public ThreadA(ObjectService objectService){
        super();
        this.objectService=objectService;
    }

    @Override
    public void run() {
        super.run();
       objectService.serviceMethodA();
    }
}

/**
 * @author wuyoushan
 * @date 2017/4/4.
 */
public class ThreadB extends Thread{

    private ObjectService objectService;

    public ThreadB(ObjectService objectService){
        super();
        this.objectService=objectService;
    }

    @Override
    public void run() {
        super.run();
        objectService.serviceMethodB();
    }
}

/**
 * @author wuyoushan
 * @date 2017/3/20.
 */
public class Run {
    public static void main(String[] args){
        ObjectService objectService=new ObjectService();
        ThreadA a=new ThreadA(objectService);
        a.setName("a");
        a.start();

        ThreadB b=new ThreadB(objectService);
        b.setName("b");
        b.start();
    }
}

程序的运行结果为:

A begin time=1492130124674
A end    end=1492130126675
B begin time=1492130126675
B end    end=1492130126675

synchronized(this)代码块是锁定当前对象的

摘选自 java多线程核心编程技术-2.2.5

相关文章

  • 2.2.5synchronized代码块间的同步性

    在使用同步synchronized(this)代码块时需要注意的是,当一个线程访问object的一个synchro...

  • Java 多线程

    内置锁 Java提供了内置的锁机制来支持原子性:同步代码块(Synchronized Block)。同步代码块包括...

  • 代码块

    定义:被“{}”包括的代码片段,使代码具备独立性,一般用于实现特定算法; 分类:普通代码块、静态代码块、同步代码块...

  • Java16-4 死锁

    死锁有两种情况1、同步嵌套同步方法中嵌套同步代码块或同步代码块嵌套同步代码块出现的错误

  • 探索synchronized

    特性 原子性 可见性 有序性:同一个时刻只有一个线程访问同步代码块,即线程执行同步代码块是有先后顺序的 可重入性:...

  • Java synchronized对象级别与类级别的同步锁

    Java synchronized 关键字 可以将一个代码块或一个方法标记为同步代码块。同步代码块是指同一时间只...

  • Java之同步代码块

    Java多线程的同步代码块 synchronized(对象){ 需要同步的代码 } 同步代码块可以解决安全...

  • 释放锁的三种情况

    1.执行完同步方法或同步代码块 2.在同步方法或同步代码块中调用wait方法 3.在同步方法或同步代码块中发生异常...

  • 2-javascript运行机制

    1、JS是按照代码块来进行编译和执行的,代码块间相互独立,但变量和方法共享。(块间独立性/块间共享性) 2、声明式...

  • 《Java并发程编程艺术》重点总结

    synchronized修饰的代码块同步执行,不在synchronized块中的代码会异步执行,因此推荐用同步代码...

网友评论

      本文标题:2.2.5synchronized代码块间的同步性

      本文链接:https://www.haomeiwen.com/subject/xgaxhxtx.html