博客
关于我
两个线程同时访问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各个版本区别及问题总结
查看>>
MySql各种查询
查看>>
mysql同主机下 复制一个数据库所有文件到另一个数据库
查看>>
mysql启动以后会自动关闭_驾照虽然是C1,一直是开自动挡的车,会不会以后就不会开手动了?...
查看>>
mysql启动和关闭外键约束的方法(FOREIGN_KEY_CHECKS)
查看>>
Mysql启动失败解决过程
查看>>
MySQL启动失败:Can't start server: Bind on TCP/IP port
查看>>
mysql启动报错
查看>>
mysql启动报错The server quit without updating PID file几种解决办法
查看>>
MySQL命令行登陆,远程登陆MySQL
查看>>
mysql命令:set sql_log_bin=on/off
查看>>
mySQL和Hive的区别
查看>>
MySQL和Java数据类型对应
查看>>
mysql和oorcale日期区间查询【含左右区间问题】
查看>>
MYSQL和ORACLE的一些操作区别
查看>>
mysql和redis之间互相备份
查看>>
MySQL和SQL入门
查看>>
mysql在centos下用命令批量导入报错_Variable ‘character_set_client‘ can‘t be set to the value of ‘---linux工作笔记042
查看>>
Mysql在Linux运行时新增配置文件提示:World-wrirable config file ‘/etc/mysql/conf.d/my.cnf‘ is ignored 权限过高导致
查看>>