Synchronized 个人深解
package com.lly.base.syn;
/**
* synchronized阻塞测试
* 1.synchronized方法相当于synchronized(this)
* Synchronized 方法是锁的当前对象,同一个对象的2个synchronized方法被2个线程调用会发生阻塞;
* 2.static synchronized方法相当于synchronized(this.class)
* static synchronized方法是锁当前对象的Class,被所有此类的实例共享,多个线程调用此类的static synchronized方法会发生阻塞
*
* @author liuly
*
*/
public class SynchronizedTest { public static void main(String[] args) {
Syn1 n1 = new Syn1();
Syn1 n2 = new Syn1();
//
// /******两个线程会阻塞 (对象锁)**/
// new Thread(()->{
// System.out.println("线程1 启动");
// n1.add1();
//
// }).start();
//
// new Thread(()->{
// System.out.println("线程2 启动");
// n1.add1();
//
// }).start();
//
// /******两个线程会阻塞 (对象锁) add1 add2 锁定同一个对象n1**/
// new Thread(()->{
// System.out.println("线程1 启动");
// n1.add1();
//
// }).start();
//
// new Thread(()->{
// System.out.println("线程2 启动");
// n1.add2();
//
// }).start();
//
// /******两个线程不会阻塞(static add3是类锁,而add2 是对象锁 ) **/
// new Thread(()->{
// System.out.println("线程1 启动");
// n1.add2();
//
// }).start();
//
// new Thread(()->{
// System.out.println("线程2启动");
// n2.add3();
//
// }).start();
// /******两个线程不会阻塞(static add3是类锁,虽然不是一个对象,但都是锁定同一个Syn1.class ) **/
// new Thread(()->{
// System.out.println("线程1 启动");
// n1.add3();
//
// }).start();
//
// new Thread(()->{
// System.out.println("线程2 启动");
// n2.add3();
//
// }).start(); }
} class Syn1{
/*
* 非静态方法一:add1
* 同一个对象的add1方法会与add2阻塞
*/
public synchronized void add1(){
System.out.println("add1 begin");
try {
Thread.sleep(4000);
System.out.println("add1 end");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*
* 非静态方法一:add2
*
*/
public synchronized void add2(){
System.out.println("add2 begin"); try {
Thread.sleep(1000);
System.out.println("add2 end");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*
* 静态方法一:add3
* 所有的调用add3方法的线程都会阻塞
*
* 注:add3不会与add1(or add2)阻塞
*/
public static synchronized void add3(){
System.out.println("add3 begin"); try {
Thread.sleep(1000);
System.out.println("add3 end");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Synchronized 个人深解的更多相关文章
- Java多线程(三)—— synchronized关键字详解
一.多线程的同步 1.为什么要引入同步机制 在多线程环境中,可能会有两个甚至更多的线程试图同时访问一个有限的资源.必须对这种潜在资源冲突进行预防. 解决方法:在线程使用一个资源时为其加锁即可. 访问资 ...
- “全栈2019”Java多线程第十六章:同步synchronized关键字详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- Java synchronized 关键字详解
Java synchronized 关键字详解 前置技能点 进程和线程的概念 线程创建方式 线程的状态状态转换 线程安全的概念 synchronized 关键字的几种用法 修饰非静态成员方法 sync ...
- Java并发之Synchronized机制详解
带着问题阅读 1.Synchronized如何使用,加锁的粒度分别是什么 2.Synchronized的实现机制是什么 3.Synchronized是公平锁吗 4.Java对Synchronized做 ...
- synchronized锁详解
synchronized的意义 解决了Java共享内存模型带来的线程安全问题: 如:两个线程对初始值为 0 的静态变量一个做自增,一个做自减,各做 5000 次,结果是 0 吗?(针对这个问题进行分析 ...
- (转)Lock和synchronized比较详解
今天看了并发实践这本书的ReentantLock这章,感觉对ReentantLock还是不够熟悉,有许多疑问,所有在网上找了很多文章看了一下,总体说的不够详细,重点和焦点问题没有谈到,但这篇文章相当不 ...
- 从线程池到synchronized关键字详解
线程池 BlockingQueue synchronized volatile 前段时间看了一篇关于"一名3年工作经验的程序员应该具备的技能"文章,倍受打击.很多熟悉而又陌生的知识 ...
- java synchronized 同步详解
记下来,很重要. Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 一.当两个并发线程访问同一个对象object中的这个synchron ...
- Java 多线程(六) synchronized关键字详解
多线程的同步机制对资源进行加锁,使得在同一个时间,只有一个线程可以进行操作,同步用以解决多个线程同时访问时可能出现的问题. 同步机制可以使用synchronized关键字实现. 当synchroniz ...
随机推荐
- BZOJ 1901 & 整体二分
题意: 带修改的区间第K小. SOL: 看了很久很久很久很久的整体二分,网上的各种题解也不是很多,也一直很不了解所谓的"贡献","将询问一起递归"是什么意思.. ...
- ACM: HDU 5418 Victor and World - Floyd算法+dp状态压缩
HDU 5418 Victor and World Time Limit:2000MS Memory Limit:131072KB 64bit IO Format:%I64d & ...
- 【HDU】3516 Tree Construction
http://acm.hdu.edu.cn/showproblem.php?pid=3516 题意:平面n个点且满足xi<xj, yi>yj, i<j.xi,yi均为整数.求一棵树边 ...
- gui学习
GUI 图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面 有名的实现 : ucgui . 实现围绕几个问题: ...
- golang 自定义封包协议(转的)
package protocol import ( "bytes" "encoding/binary" ) const ( ConstHeader = &quo ...
- html中隐藏域hidden的作用介绍及使用示例
基本语法: <input type="hidden" name="field_name" value="value"> 作用: ...
- odoo报表条码无法显示解决[转]
当服务器为Linux(Ubuntu)时,ODOO打印的报表上是有条码的,却显示空白框框.问题在于服务器上没有安装条码的字体,reportlab渲染条码图形失败,导致显示不正常. 将附件中的字体下载,解 ...
- 解决mysql5.6+在zabbix监控中执行脚本出现密码的错误问题
1.mysql命令行中授权mysql监控所需的账号和密码(权限select权限即可) 2.通过mysql_config_editor 配置登录问题: [root@back_zabbix_100 scr ...
- Caused by: java.io.NotSerializableException: com.omhy.common.model.entity.XXX解决方法
启动tomact时引起的Caused by: java.io.NotSerializableException异常 种种情况就是没有序列化.序列化可以将内存中的类写入文件或数据库中 Serializa ...
- Jquery dialog属性
修改标题: $('#test').dialog("option","title", "测试").dialog('open'); 修改位置: ...