博客
关于我
两个线程同时访问synchronized修饰的静态方法(synchronized)
阅读量:231 次
发布时间:2019-02-28

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

示例代码

public class TestMain implements Runnable {       //格式化    static SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    @Override    public void run() {           method();    }    //这里要构建静态方法就得把方法抽出来,重写run()方法是不支持static修饰符的    public static synchronized void method() {           Date satrtTime = new Date();        String time = sim.format(satrtTime);        System.out.println(time + ":【" + Thread.currentThread().getName() + "访问了方法】");        try {               //睡眠3秒            Thread.sleep(3000);        } catch (InterruptedException e) {               e.printStackTrace();        }        Date endTime = new Date();        String time2 = sim.format(endTime);        System.out.println(time2 + ":【" + Thread.currentThread().getName() + "准备退出这个方法了】");    }    public static void main(String[] args) throws Exception {           //创建一个对象testMain1        TestMain testMain1 = new TestMain();        //再创建一个对象testMain2        TestMain testMain2 = new TestMain();        System.out.println("运行开始");        Thread thread1 = new Thread(testMain1);        Thread thread2 = new Thread(testMain2);        thread1.start();        thread2.start();        //让主线程做个等待,等线程一和线程二都执行完它才继续执行        thread1.join();        thread2.join();        System.out.println("运行结束");    }}

运行结果:

在这里插入图片描述

总结

从运行结果可以发现,这时虽然用了两个不同的实例对象,但是Thread-1线程还是要等待Thread-0释放锁,这时因为用static修饰的方法属于类方法,这时的锁是类锁,类只有一个,不管你实例化了多少个对象,他们类都是一样的,所以锁也是一样的,自然需要等待和竞争。

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

你可能感兴趣的文章
mysql数据库备份与恢复
查看>>
MySQL数据库备份实战
查看>>
Mysql数据库备份的问题:mysqldump: Got error: 1049: Unknown_无需整理
查看>>
mysql数据库如何重置密码是多少钱_MySQL数据库忘记root密码如何重置修改
查看>>
MySQL数据库安装配置与常用命令
查看>>
MySQL数据库实现主从同步数据
查看>>
mysql数据库导入导出_windows系统以及linux系统下的操作---linux工作笔记042
查看>>
mysql数据库导出导入
查看>>
MySQL数据库工具类之——DataTable批量加入MySQL数据库(Net版)
查看>>
mysql数据库常用命令
查看>>
MySQL数据库必会的增删查改操作(CRUD)
查看>>
MySQL数据库性能分析与调优实践
查看>>
mysql数据库扫盲,你真的知道什么是数据库嘛
查看>>
mysql数据库批量插入数据shell脚本实现
查看>>
MySQL数据库操作
查看>>
MySQL数据库故障排错
查看>>
MySQL数据库无法远程连接的解决办法
查看>>
mysql数据库时间类型datetime、bigint、timestamp的查询效率比较
查看>>
MySQL数据库服务器端核心参数详解和推荐配置(一)
查看>>
mysql数据库死锁的产生原因及解决办法
查看>>