您当前的位置: 首页 > 

梁云亮

暂无认证

  • 2浏览

    0关注

    1211博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

多线程 之 synchronized

梁云亮 发布时间:2020-02-13 01:21:46 ,浏览量:2

理论

关键字Synchronized是Java中解决并发问题的一种最常用、最简单的方法 ,它可以确保线程互斥的访问同步代码。

关键字synchronized可以保证方法或者代码块在运行时,同一时刻只有一个线程可以进入到临界区,同时它还可以保证共享变量的内存可见性。

Java中每一个对象都可以作为锁,这是synchronized实现同步的基础。

Synchronzed有以下三种应用方式:

  • 普通同步方法(实例方法):锁是当前实例对象 ,进入同步代码前要获得当前实例的锁

    synchronized 返回值 方法名(){ //锁的是当前的对象 }

  • 静态同步方法:锁是当前类的class对象 ,进入同步代码前要获得当前类对象的锁
  • 同步代码块:锁是括号里面的对象,对给定对象加锁,进入同步代码块前要获得给定对象的锁。

    synchronized(o){ }

示例:synchronized作用于实例方法 示例1:多个线程访问同一个对象的同一实例方法

当多个线程同时对一个对象的同一个方法进行操作时,只有一个线程能够抢到锁。因为一个对象只有一把锁,一个线程获取了该对象的锁之后,其他线程无法获取该对象的锁,就不能访问该对象的synchronized实例方法,但是可以访问非synchronized修饰的方法。

public class MyRunnable implements Runnable{
    private static int i = 0;//共享资源
    public synchronized void incr(){  // synchronized 修饰实例方法
        i++;
    }
    @Override
    public void run(){
        for (int j =0 ; j            
关注
打赏
1665409997
查看更多评论
0.0459s