博客
关于我
两个线程同时访问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实战01|基础架构:一条SQL查询语句是如何执行的?
查看>>
Mysql实战之数据备份
查看>>
MySQL实战教程:从小白到大神的进阶之路!
查看>>
mysql实现成绩排名
查看>>
Mysql客户端中文乱码问题解决
查看>>
mysql客户端工具使用
查看>>
MySQL密码忘记,怎么办?
查看>>
mysql对同一张表进行查询和赋值更新
查看>>
mysql导入数据库出现:Incorrect string value: '\xE7\x82\xB9\xE9\x92\x9F' for column 'chinese' at row 1...
查看>>
mysql导入(ibd文件)
查看>>
Mysql工作笔记006---Mysql服务器磁盘爆满了_java.sql.SQLException: Error writing file ‘tmp/MYfXO41p‘
查看>>
MySQL工具1:mysqladmin
查看>>
mysql常用命令
查看>>
MySQL常用命令
查看>>
mysql常用命令
查看>>
MySQL常用指令集
查看>>
mysql常用操作
查看>>
MySQL常用日期格式转换函数、字符串函数、聚合函数详
查看>>
MySQL常见架构的应用
查看>>
MySQL常见的三种存储引擎(InnoDB、MyISAM、MEMORY)
查看>>