java线程基础巩固---同步代码块以及同步方法之间的区别和关系
在上一次中【http://www.cnblogs.com/webor2006/p/8040369.html】采用同步代码块的方式来实现对线程的同步,如下:

对于同步方法我想都知道,就是将同步关键字声明在方法上滴,那如果改用这种同步方式会怎样呢?下面实验下:


编译运行:

发现全被一号窗口执行了,另外两个线程都木有输出,这是为啥呢?这时就需要来分析执行流程了:


此时就可以晓得为啥全部由1号线执行了,因为其它线程还在等待1号线程释放锁,1号线程木有执行完当然其它线程也得不到锁啦,当1号线程执行完之后就退出了,接下来:


另外需要说明的是,此处同步方法同步的是this,也就是当前对象,那显示目前改成同步方法之后不是我们期望的执行结果,那如何不用同步块还是用同步方法的方式来达到之前同步块的效果:也就是三个线程都可以执行到,这时就需要对代码进行重构啦,如下:

这时再编译运行:

这样就将同步块的方式换成了同步方法,其执行结果一样,对于线程同步时尽量小范围去加,而不是一上来就直接给方法上上锁,不过具体根据实际的业务场景来决定。
java线程基础巩固---同步代码块以及同步方法之间的区别和关系的更多相关文章
- 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁
什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...
- java中的synchronized同步代码块和同步方法的区别
下面这两段代码有什么区别? //下列两个方法有什么区别 public synchronized void method1(){} public void method2(){ synchronized ...
- Java的synchronized的同步代码块和同步方法的区别
synchronized同步方法和同步代码块的区别 同步方法默认使用this或者当前类做为锁. 同步代码块可以选择以什么来加锁,比同步方法更精确,我们可以选择只有会在同步发生同步问题的代码加锁,而并不 ...
- Android(java)学习笔记68:同步代码块 和 同步方法 的应用
1. 同步代码块 和 同步方法 代码示例: (1)目标类,如下: package cn.himi.text; public class SellTicket implements Runnable { ...
- java 同步代码块与同步方法
同步代码块 synchronized (obj) { // 代码块 } obj 为同步监视器,以上代码的含义为:线程开始执行同步代码块(中的代码)之前,必须先获得对同步监视器的锁定. 代码块中的代码是 ...
- Android(java)学习笔记8:同步代码块 和 同步方法 的应用
1. 同步代码块 和 同步方法 代码示例: (1)目标类,如下: package cn.himi.text; public class SellTicket implements Runnable { ...
- [java多线程] - 锁机制&同步代码块&信号量
在美眉图片下载demo中,我们可以看到多个线程在公用一些变量,这个时候难免会发生冲突.冲突并不可怕,可怕的是当多线程的情况下,你没法控制冲突.按照我的理解在java中实现同步的方式分为三种,分别是:同 ...
- 线程执行synchronized同步代码块时再次重入该锁过程中抛异常,是否会释放锁
一个线程执行synchronized同步代码时,再次重入该锁过程中,如果抛出异常,会释放锁吗? 如果锁的计数器为1,抛出异常,会直接释放锁: 那如果锁的计数器为2,抛出异常,会直接释放锁吗? 来简单测 ...
- 写2个线程,一个打印1-52,一个打印A-Z,打印顺序是12A34B。。。(采用同步代码块和同步方法两种同步方法)
1.同步方法 package Synchronized; /************************************同步方法****************************** ...
随机推荐
- Microsoft Hackathon 2019 留念
参加今年微软的 Hackathon 是 2019 年 7 月份的事情,但是后来各种各样的事情,考托.考G.网申……就给耽搁了.我本来以为自己的记忆力足够好,几个月以后也能写很多东西,然鹅……现在发现好 ...
- Go语言中切片的内部实现和基础功能
切片是一种数据结构,这种数据结构便于使用和管理数据集合.切片是围绕动态数组的概念构建的,可以按需自动增长和缩小.切片的动态增长是通过内置函数append来实现的.这个函数可以快速且高效的增长切片.还可 ...
- python库 使用shutil来删除文件夹时报PermissionError时的解决方案
解决方案: def handle_remove_read_only(func, path, exc): excvalue = exc[1] if func in (os.rmdir, os.remov ...
- (5.14)mysql高可用系列——级联复制与多主一从
目录: [0]实验需求 级联复制,201为主库,202为从库/同时为203的主库,203为202的从库[1]实验环境 级联:A->B->C 实践思路: (1)直接拿A的xtrabackup ...
- JDK1.8 新特性(全)
原文链接:https://blog.csdn.net/qq_29411737/article/details/80835658
- MFC使用ado连接SQLserver
https://blog.csdn.net/GK_2014/article/details/50530103
- PAT A1005 Spell It Right (20)
书中AC代码 #include <cstdio> #include <cstring> #include <iostream> char num[10][10] = ...
- GitHub访问及git工具克隆慢问题解决
一.查询合适的DNS服务器 1.站长工具DNS查询服务器 github.com github.global.ssl.fastly.net 2.选择TTL值最小的记录,记录下对应服务器IP地址 例如 g ...
- Codeforces 1237F. Balanced Domino Placements
传送门 很妙的题 首先先考虑一个简化的问题,现在有一行格子让你填 你要么填一格 要么填两格 有的格子不让你填 问你填了 $a$ 个一格和填了 $b$ 个两格有多少种方案 那么显然先只考虑放两格的方案, ...
- tensorflow零起点快速入门(4) --入门常用API
tf.reduce_mean https://blog.csdn.net/he_min/article/details/78694383 计算均值,全部数字的均值,纵向一维的均值,横向一维的均值 tf ...