美文网首页
synchronized初级使用篇

synchronized初级使用篇

作者: 大黑跟小白的日常 | 来源:发表于2020-08-30 21:24 被阅读0次

此篇主要讲解使用synchronized时同步异步问题

抛出总结:

使用synchronized对资源(对象)进行加锁,多线程并发访问,具体多线程并发操作是同步还是异步执行,就看竞争的资源是否为同一个,或者说抢占的锁是否为同一把。如果竞争的是同一把锁,则同步,为不同的锁则互不干扰(异步)。

测试代码如下,猜猜结果 (共四个)

全猜对者合格

/**
 * @Author G_Y
 * @Date 2020/8/30 20:19
 * @Description: // synchronized初级使用篇
 **/
public class synchronizedLean1 {

    public static void main(String[] args) {

        // 1
        /*final Human h1 = new Human();
        final Human h2 = new Human();
        new Thread(new Runnable() {
            @Override
            public void run() {
                h1.say();
            }
        }).start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                h2.say();
            }
        }).start();*/

        // 2
        /*final Human h1 = new Human();
        new Thread(new Runnable() {
            @Override
            public void run() {
                h1.say();
            }
        }).start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                h1.bibi();
            }
        }).start();*/

        // 3
        /*final Human h1 = new Human();
        final Human h2 = new Human();
        new Thread(new Runnable() {
            @Override
            public void run() {
                h1.aiai();
            }
        }).start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                h2.aiai();
            }
        }).start();*/

        // 4
        final Human h1 = new Human();
        new Thread(new Runnable() {
            @Override
            public void run() {
                h1.cici();
            }
        }).start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                h1.didi();
            }
        }).start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                h1.eiei();
            }
        }).start();
    }
}

class Human {
    public static void sleep1ms() {
        for (int i = 1; i <= 10; i++) {
            try {
                TimeUnit.MILLISECONDS.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(i);
        }
    }

    public synchronized void say() {
        Human.sleep1ms();
    }

    public synchronized void hello() {
        Human.sleep1ms();
    }

    public static synchronized void bibi() {
        Human.sleep1ms();
    }

    public void aiai() {
        synchronized (this.getClass()) {
            Human.sleep1ms();
        }
    }

    public void cici() {
        synchronized (Human.class) {
            Human.sleep1ms();
        }
    }

    public void didi() {
        synchronized ("") {
            Human.sleep1ms();
        }
    }

    public void eiei() {
        synchronized ("abcdefg") {
            Human.sleep1ms();
        }
    }
}
问题: 如上这些多线程在执行方法时是同步还是异步?

相关文章

  • synchronized初级使用篇

    此篇主要讲解使用synchronized时同步异步问题 抛出总结: 使用synchronized对资源(对象)进行...

  • recyclerView 进阶知识

    一 初级篇 1. 请参照csdn上我的两篇: a android 5.0新特性 RecyclerView使用初级...

  • synchronized关键字

    synchronized锁住的不是代码而是对象 synchronized的使用 synchronized代码块,被...

  • 2017-12-28

    synchronized和volatile volatile仅能使用在变量级别;synchronized则可以使用...

  • iOS_多线程锁相关_优秀非简书资源

    正确使用@synchronized()

  • synchronized与Lock使用哪个

    只有当synchronized无法满足需求时,才需要使用Lock,否则,一律使用synchronized。 使用L...

  • 写给小白看的LockSupport

    Java并发编程系列第三篇LockSupport,上一篇Synchronized文章中有提过,不推荐读者们使用Ob...

  • 面试题1

    1.写出synchronized的使用方式 synchronized的三种应用方式 synchronized关键字...

  • Java多线程同步

    synchronized关键字 synchronized关键字修饰函数方法使用synchronized关键字时,会...

  • Lock(第三篇)

    一:synchronized的弊端 第二篇中我们介绍了synchronized,为啥有了synchronized还...

网友评论

      本文标题:synchronized初级使用篇

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