博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
static synchronized方法和synchronized方法的区别和联系-2(class锁和对象锁,不同锁,混合访问时)
阅读量:4287 次
发布时间:2019-05-27

本文共 1581 字,大约阅读时间需要 5 分钟。

package com.ljf.mianshi.demo.mainshithread;public class TestJd {    public static void main(String args[]){        JDSB jdsb=new JDSB();        JDSB jdsb2=new JDSB();        new Thread(new ThreadA(jdsb),"A").start();        new Thread(new ThreadB(jdsb),"B").start();    }}package com.ljf.mianshi.demo.mainshithread;public class JDSB {    public static synchronized void   sayA() {        System.out.println("我是线程:"+Thread.currentThread().getName()+"我开始执行sayA");        try {            Thread.sleep(1000);        } catch (InterruptedException e) {            e.printStackTrace();        }        System.out.println("我是线程:"+Thread.currentThread().getName()+"我离开sayA");    }    public   synchronized  void sayB(){        System.out.println("我是线程:"+Thread.currentThread().getName()+"我开始执行sayB");        try {            Thread.sleep(1000);        } catch (InterruptedException e) {            e.printStackTrace();        }        System.out.println("我是线程:"+Thread.currentThread().getName()+"我离开sayB");    }}package com.ljf.mianshi.demo.mainshithread;public class ThreadA implements Runnable {    JDSB jdsb=null;    public ThreadA(JDSB jdsb) {        this.jdsb=jdsb;    }    @Override    public void run() {        jdsb.sayA();    }}package com.ljf.mianshi.demo.mainshithread;public class ThreadB implements Runnable {    JDSB jdsb=null;    public ThreadB(JDSB jdsb) {        this.jdsb=jdsb;    }    @Override    public void run() {        jdsb.sayB();    }}

结果:

我是线程:A我开始执行sayA

我是线程:B我开始执行sayB
我是线程:A我离开sayA
我是线程:B我离开sayB

结论:

异步原因是持有不同的锁,一个是对象锁,另外一个是Class锁,Class锁可以对所有持有class锁的对象实例起作用

转载地址:http://hxtgi.baihongyu.com/

你可能感兴趣的文章
使用http请求,中文乱码问题--解决方法
查看>>
mybatis入门之接口式编程
查看>>
html页面中iframe嵌套页面的父页面和子页面js方法互相调用
查看>>
求字符串中变换位置问题
查看>>
求这个字符串中的最大的数字字符串
查看>>
Spring报错:java.lang.ClassCastException: com.sun.proxy.$Proxy2 cannot be cast to *
查看>>
Java一键启动Linux上的tomcat服务器
查看>>
java实现导出excel表到磁盘上(三)---完整封装,可直接使用
查看>>
window安装git图文详解—GIT入门篇
查看>>
error: pathspec '测试2' did not match any file(s) known to git.
查看>>
昵称中含有特殊符号存入mysql数据库处理
查看>>
mybatis中模糊查询时一个字段匹配不定量数据解决方法
查看>>
nginx配置https后重新启动
查看>>
linux环境下安装nginx步骤
查看>>
linux安装redis 完整步骤
查看>>
用java获取指定时区的时间
查看>>
搭建SVN服务器步骤详解
查看>>
javax.mail.MessagingException: 500 Error: bad syntax问题
查看>>
JAVA判断字符串是否base64编码
查看>>
linux(CentOS7.4) 安装 Nginx 1.15.2
查看>>