import java.util.concurrent.TimeUnit;

class Phone//Phone.java ---> Phone.class     Class.forName();
{
public static synchronized void sendEmail()throws Exception
{
TimeUnit.SECONDS.sleep();
System.out.println("*****sendEmail");
}
public synchronized void sendSMS()throws Exception
{
System.out.println("*****sendSMS");
}
public void sayHello()throws Exception
{
System.out.println("*****sayHello");
}
} /**
* @auther cxy
* 8 lock
*1 标准访问,请问先打印邮件还是短信
*2 暂停4秒钟在邮件方法,请问先打印邮件还是短信
*3 新增普通sayHello方法,请问先打印邮件还是hello
*4 两部手机,请问先打印邮件还是短信
*5 两个静态同步方法,同一部手机,请问先打印邮件还是短信
*6 两个静态同步方法,2部手机,请问先打印邮件还是短信
*7 1个静态同步方法,1个普通同步方法,同一部手机,请问先打印邮件还是短信
*8 1个静态同步方法,1个普通同步方法,2部手机,请问先打印邮件还是短信
*
* * 一个对象里面如果有多个synchronized方法,某一个时刻内,只要一个线程去调用其中的一个synchronized方法了,
* * 其它的线程都只能等待,换句话说,某一个时刻内,只能有唯一一个线程去访问这些synchronized方法
* *
* * 锁的是当前对象this,被锁定后,其它的线程都不能进入到当前对象的其它的synchronized方法
*
* * 加个普通方法后发现和同步锁无关
*
* * 换成两个对象后,不是同一把锁了,情况立刻变化。
*
* * synchronized实现同步的基础:Java中的每一个对象都可以作为锁。
* * 具体表现为以下3种形式。
* * 对于普通同步方法,锁是当前实例对象,锁的是当前对象this,
* * 对于同步方法块,锁是Synchonized括号里配置的对象。
*
* * 对于静态同步方法,锁是当前类的Class对象。
*/
public class Lock8Demo05
{
public static void main(String[] args) throws InterruptedException
{
Phone phone = new Phone();
Phone phone2 = new Phone(); new Thread(() -> {
try
{
phone.sendEmail();
} catch (Exception e) {
e.printStackTrace();
}
},"A").start(); Thread.sleep(); new Thread(() -> {
try
{
//phone.sendSMS();
//phone.sayHello();
phone2.sendSMS();
} catch (Exception e) {
e.printStackTrace();
}
},"B").start(); }
}

可以看代码进行修改

static修饰锁,锁住了当前类对象,没有修饰则锁定的是当前对象

java锁分析的更多相关文章

  1. Java锁-Synchronized深层剖析

    Java锁-Synchronized深层剖析 前言 Java锁的问题,可以说是每个JavaCoder绕不开的一道坎.如果只是粗浅地了解Synchronized等锁的简单应用,那么就没什么谈的了,也不建 ...

  2. Java 性能分析工具 , 第 3 部分: Java Mission Control

    引言 本文为 Java 性能分析工具系列文章第三篇,这里将介绍如何使用 Java 任务控制器 Java Mission Control 深入分析 Java 应用程序的性能,为程序开发人员在使用 Jav ...

  3. Java锁的种类

    转载自:---->http://ifeve.com/java_lock_see/ Java锁的种类以及辨析锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchroniz ...

  4. JAVA 可视化分析工具 第12节

    JAVA 可视化分析工具  第12节 经过前几章对堆内存以及垃圾收集机制的学习,相信小伙伴们已经建立了一套比较完整的理论体系!那么这章我们就根据已有的理论知识,通过可视化工具来实践一番. 我们今天要讲 ...

  5. JAVA 锁之 Synchronied

    ■ Java 锁 1. 锁的内存语义 锁可以让临界区互斥执行,还可以让释放锁的线程向同一个锁的线程发送消息 锁的释放要遵循 Happens-before 原则(锁规则:解锁必然发生在随后的加锁之前) ...

  6. Java 锁的学习

    个人学习整理,所有资料均来源于网络,非原创. 死锁的四个必要条件:互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用.请求与保持条件(Hold and wait):已经得 ...

  7. JAVA锁和volatile的内存语义&volatile的使用场景

    JAVA锁的内存语义 当线程释放锁时,JMM(Java Memory Model)会把该线程对应的本地内存中的共享变量刷新到主内存中. 当线程获取锁时,JMM会将该线程对应的本地内存置为无效.从而使得 ...

  8. 转 : 深入解析Java锁机制

    深入解析Java锁机制 https://mp.weixin.qq.com/s?__biz=MzU0OTE4MzYzMw%3D%3D&mid=2247485524&idx=1&s ...

  9. 性能监控工具以及java堆分析OOM

      一.性能监控工具 1.系统性能监控 Linux -确定系统运行的整体状态,基本定位问题所在 -uptime: ------系统时间 ------运行时间(例子中为127天) ------连接数(每 ...

随机推荐

  1. 10、jqueryEasyUI感觉自己还是改行做前端吧

    1.jquery的局部方法开发 //首先引入jquery的相关包组件 <script type="text/javascript" src="../js/jquer ...

  2. delphi基础篇之数据类型

      Object Pascal 数据类型    数据类型与定义变量 Object Pascal 语言的最大特点是对数据类型的要求非常严谨.传递给过程或函数的参数值必须与形参的类型一致.在Object ...

  3. python 实现异常退出

    https://blog.csdn.net/u013385362/article/details/81206822 有时当一个条件成立的情况下,需要终止程序,可以使用sys.exit()退出程序.sy ...

  4. 【Java多线程系列五】列表类

    一些列表类及其特性  类 线程安全 Iterator 特性 说明 Vector 是 fail-fast 内部方法用synchronized修饰,因此执行效率较低 1. 线程安全的列表类并不意味着调用它 ...

  5. JS中的事件、数组、节点对象处理

    在JS代码中编写事件一定要保证页面在浏览器中加载时会把事件加载进页面 事件:在代码中可以通过一个动作来触发另一个行为的总称 A:事件的编写方式1 HTML标签中添加 onxxxx = "函数 ...

  6. Centos 能ping通域名和公网ip但是网站不能够打开,服务器拒绝了请求。打开80端口解决。

    博客搬迁,给你带来的不便,敬请谅解! http://www.suanliutudousi.com/2017/10/29/centos-%E8%83%BDping%E9%80%9A%E5%9F%9F%E ...

  7. leetcode.数组.16最接近的三数之和-java

    1. 具体题目 给定一个包括 n 个整数的数组 nums 和 一个目标值 target.找出 nums 中的三个整数,使得它们的和与 target 最接近.返回这三个数的和.假定每组输入只存在唯一答案 ...

  8. 高并发下的缓存架构设计演进及redis常见的缓存应用异象解决方案

    待总结 缓存穿透 缓存击穿 缓存雪崩等

  9. Java split的用法

    java.lang.string.split split 方法 将一个字符串分割为子字符串,然后将结果作为字符串数组返回. stringObj.split([separator,[limit]]) s ...

  10. zabbix--监控的组件和进程介绍

    上图是zabbix的架构,zabbix proxy(代理),可以减小IO并发. zabbix web GUI是用php写的画图工具,从数据库抓取数据. zabbix database zabbix获取 ...