示例代码1:可以对任意Object对象进行加锁

public class ObjectLock {public void method1(){synchronized (this) {//对象锁try {System.out.println("method1......");Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}}}public void method2(){synchronized (ObjectLock.class) {//类锁try {System.out.println("method2......");Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}}}private Object lock = new Object();public void method3(){synchronized (lock) {//任何对象锁try {System.out.println("method3......");Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}}}public static void main(String[] args) {final ObjectLock ol = new ObjectLock();Thread t1 = new Thread(new Runnable() {@Overridepublic void run() {ol.method1();}},"t1");Thread t2 = new Thread(new Runnable() {@Overridepublic void run() {ol.method2();}},"t2");Thread t3 = new Thread(new Runnable() {@Overridepublic void run() {ol.method3();}},"t3");t1.start();t2.start();t3.start();}
}

示例程序2:String 字符串锁

package com.bjsxt.thread.sync006;public class StringLock {public void method() {//如果锁是非new出来的,那么就是一个常量,则被独占while(true)死循环,,若是被new出来的,则2个对象/*** 当前线程t2开始当前线程t1开始当前线程t1结束当前线程t2结束*/
//      synchronized (new String("字符串常量")) {/*** 当前线程t1开始当前线程t1结束当前线程t1开始当前线程t1结束*/synchronized ("字符串常量") {try {while(true) {System.out.println("当前线程"+Thread.currentThread().getName()+"开始");Thread.sleep(2000);System.out.println("当前线程"+Thread.currentThread().getName()+"结束");}} catch (InterruptedException e) {e.printStackTrace();}}}public static void main(String[] args) {final StringLock ol = new StringLock();Thread t1 = new Thread(new Runnable() {@Overridepublic void run() {ol.method();}},"t1");Thread t2 = new Thread(new Runnable() {@Overridepublic void run() {ol.method();}},"t2");t1.start();t2.start();}
}

Java多线程并发笔记03 synchronized减小锁粒度,优化代码执行时间相关推荐

  1. java多线程学习笔记。

    java多线程学习笔记 线程的优缺点: 多线程的好处: 充分利用多处理核心,提高资源的利用率和吞吐量. 提高接口的响应效率,异步系统工作. 线程的风险: 安全危险(竞争条件):什么坏事都没有发生.在没 ...

  2. 2021全新Java多线程并发入门到精通,一篇就能学会

    目录 一, JAVA 多线程并发 1,JAVA 并发知识库 2,JAVA 线程实现/创建方式 (1) 继承 Thread 类 (2)实现 Runnable 接口. (3)ExecutorService ...

  3. Java多线程并发技术

    Java多线程并发技术 参考文献: http://blog.csdn.net/aboy123/article/details/38307539 http://blog.csdn.net/ghsau/a ...

  4. Java 多线程 并发编程

    转载自  Java 多线程 并发编程 一.多线程 1.操作系统有两个容易混淆的概念,进程和线程. 进程:一个计算机程序的运行实例,包含了需要执行的指令:有自己的独立地址空间,包含程序内容和数据:不同进 ...

  5. Java多线程并发编程

    一.线程池 1.1.什么是线程池 线程池是一种多线程的处理方式,利用已有线程对象继续服务新的任务(按照一定的执行策略),而不是频繁地创建销毁线程对象,由此提高服务的吞吐能力,减少CPU的闲置时间.具体 ...

  6. 深入学习Java多线程——并发机制底层实现原理

    2019独角兽企业重金招聘Python工程师标准>>> Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执 ...

  7. Java多线程并发编程--Java并发包(JUC)

    Java多线程并发–Java并发包(JUC) 前言 前一篇文章中,笔者已经介绍了Java多线程的一些基础知识,但是想要成为一名中高级Java程序员还必须懂得Java并发包(JUC)的知识点,而且JUC ...

  8. JAVA 多线程并发超详解

    JAVA 多线程并发超详解(未完,下一篇文章还有) 1. JAVA 多线程并发 1.1.1. JAVA 并发知识库 1.1.2. JAVA 线程实现/创建方式 1.1.2.1. 继承 Thread 类 ...

  9. delay在java中有什么用_DelayQueue怎么在Java多线程并发开发中使用

    DelayQueue怎么在Java多线程并发开发中使用 发布时间:2020-12-05 17:29:31 来源:亿速云 阅读:56 作者:Leah 这篇文章给大家介绍DelayQueue怎么在Java ...

最新文章

  1. 用 Python 制作数据大屏,超简单
  2. python读取word中后缀名docx的文件的表格
  3. centos升级之共享文件夹
  4. 建立.NET Core控制台应用程序以输出EXE?
  5. python3web库_基于 Python3 写的极简版 webserver
  6. 手机处理器排名2019_手机CPU天梯图2020年3月最新版 你的手机处理器排名高吗?...
  7. 使用layer 实现点击 显示大图
  8. 有声小说php源码,PHP魅雅有声小说联盟程序源码 v7.7.2
  9. Rust LLDB 调试入门指北
  10. System.gc()的理解
  11. PDF/OCR识别提取工具:Readiris Pro 17 for Mac
  12. 民营企业如何设置绩效考核指标的标准
  13. PHPMyWind支持ppt导入
  14. Rosalind Java|Locating Restriction Sites
  15. 遥遥领先影像组件:dicomobjects.ocx
  16. Flarum常用插件汇总
  17. QQ2009 Preview 下载 图片大赏+简单评测
  18. qqext|QQ显IP插件
  19. Nessus: 漏洞扫描器-网络取证工具
  20. 经典电子书(转)免费下载

热门文章

  1. BSphp网络验证系统,三方插件 开源代理开通扣点插件
  2. 使用labview向命令行发送按键消息
  3. 【SpringMVC】Servlet转发和重定向的区别
  4. 稳居第一梯队后,百度“云+AI”向行业纵深挺进
  5. 遥感数据获取方式总结
  6. webpage基本使用
  7. CSS3 使用技巧:纯 CSS3 实现黑白图像效果
  8. postgresql安装后链接报错psql: FATAL: Ident authentication failed for user “postgres“
  9. Spring Cloud Alibaba系列博客汇总整理
  10. 概率统计·多维随机变量及其分布【二维随机变量、边缘分布、条件分布】