1.有效的缩小同步范围可以再保证并发安全的前提下提高并发效率,同步块可以更精确的锁定需要同步执行的代码片段.

举个生活例子:

买衣服可以简化为三个步骤:①挑选衣服②试衣服③结账.

在同一家店中多个顾客可以同时各自挑选衣服(①),假设只有一个试衣间,那么(②)同一时间 "只能一个人" 试衣服,结账也可以多人同时进行.

package day01;
/*** 有效的缩小同步范围可以再保证并发安全的前提下提高并发效率* 同步快可以更精确的锁定需要同步执行的代码片段* @author 爱吃木鱼的猫*/
public class Demo01 {public static void main(String[] args) {final Shop shop=new Shop();Thread t1=new Thread(){//匿名内部类public void run(){shop.buy();}};Thread t2=new Thread(){public void run(){shop.buy();}};t1.start();t2.start();}}
class Shop{public  void buy(){try{Thread t=Thread.currentThread();System.out.println(t.getName()+":正在优衣库挑选衣服...");Thread.sleep(3000);/*** 同步块* synchronized(同步监视器对象){*    需要同步的代码片段* }*同步块可以更准确的指定需要同步执行的代码片段.但是需要注意的是多个线程之*间若需要同步执行该段代码,看到的同步监视器对象必须是同一个!**在方法上使用synchronized后,同步监视器对象为当前方法所属对象,即:this* */synchronized(this){//方法中对象可以用thisSystem.out.println(t.getName()+":正在试衣间试衣服...");Thread.sleep(3000);//3秒延迟}    System.out.println("结账离开");}catch(Exception e){}}
}/*class Shop{public synchronized void buy(){try{Thread t=Thread.currentThread();System.out.println(t.getName()+":正在挑选衣服...");Thread.sleep(3000);                       System.out.println(t.getName()+":正在试衣间试衣服...");Thread.sleep(3000);System.out.println("结账离开");}catch(Exception e){}}
}*/

对试衣间试衣服加上同步块,确保同一时间只有一个线程可以使用;如果不加上同步块(被注释的内容)就会出现两个线程同时进入试衣服,这是不允许的;

还比如买火车票,两个或多个人买同一张票,一定要有互斥锁,不然会产生一张票卖个多个人的错误.

Java.SE01.多线程_案例01相关推荐

  1. java基础-多线程应用案例展示

    java基础-多线程应用案例展示 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.两只熊,100只蜜蜂,蜜蜂每次生产的蜂蜜量是1,罐子的容量是30,熊在罐子的蜂蜜量达到20的时候 ...

  2. java中多线程编程案例_Java中多线程编程实战的实现线程_Java编程_Java程序员_课课家...

    java编程语言使多线程如此简单有效,以致于某些程序员说它实际上是自然的.尽管在 Java 中使用线程比在其他语言中要容易得多,仍然有一些概念需要掌握.要记住的一件重要的事情是 main() 函数也是 ...

  3. java foreach多线程_详解多线程入门案例与java8的并行流

    进程与线程 进程是所有线程的集合,每一个线程是进程中的一条执行路径. 多线程的创建方式,继承Thread实现Runable /*** 第一种创建线程的方式,继承Thread*/ public clas ...

  4. java 秒杀多线程_秒杀多线程系列 - 随笔分类 - Joyfulmath - 博客园

    随笔分类 - 秒杀多线程系列 秒杀多线程系列,该系列转载至CSDN MoreWindows: http://blog.csdn.net/morewindows/article/details/7392 ...

  5. 3种java实现多线程_实现java多线程的3种方式,99%人没用过第3种

    实现多线程的3种方式 1.继承Thread类 看jdk源码可以发现,Thread类其实是实现了Runnable接口的一个实例,继承Thread类后需要重写run方法并通过start方法启动线程. 继承 ...

  6. Java.SE01.多线程

     1.进程,线程: 所谓进程(process)就是一块包含了某些资源的内存区域.操作系统利用进程把它的工作划分为一些功能单元. 进程中所包含的一个或多个执行单元称为线程(thread). 一个线程 ...

  7. Java 模拟多线程并发案例

    一.使用 CountDownLatch 模拟多线程并发(并行) CountDownLatch 介绍: countDownLatch是在java1.5被引入,跟它一起被引入的工具类还有CyclicBar ...

  8. java 暂停多线程_关于java中多线程的暂停

    packagemessage;importjava.util.Scanner;publicclassThread2{publicstaticvoidmain(String[]args){TextThr ...

  9. java vector 多线程_如何使用vector解决多线程问题(java)

    现在有一个程序,使用了vector存储一些信息,然后主程序中重复调用同一个方法,每一次调用都会启动一个线程,这几个线程同时对vector操作.ArrayListlistTicket=newArray. ...

最新文章

  1. Android之一起玩转下拉刷新控件
  2. 【MSTR产品】获取当前登陆用户的login_id
  3. python数字转换_Python实现中文数字转换为阿拉伯数字的方法示例
  4. 浪潮服务器5112面板灯_SA5112M4 – IPMI设置
  5. MySQL 是如何解决幻读的
  6. 获取ftp服务器的系统编码,ftp服务器编码问题
  7. Cannot forward ... response ... committed
  8. YbtOJ 状压DP问题课堂过关 例1 种植方案【状压DP】
  9. etf基金代码大全_最全ETF基金分类大全
  10. 红帆参加HiMSS 2010(2010亚太区卫生信息大会)
  11. 将Map转换成List
  12. 阿里云认证未来网络学院ACE公开课——30分钟掌握ACE考试通关攻略
  13. 什么是IDOC,以及IDOC的步骤_小七_新浪博客
  14. 自动化装配流水线转载运输机,3D图纸。图纸stp格式1g大小零件齐全
  15. 前端使用prettier格式化规范
  16. Windows远程桌面连接Mac OS X
  17. 图片数据增强,包括模糊,亮度,裁剪,旋转,平移,镜像 ,python ,LabelImg,LabelMe工具
  18. QT——Qt QtCreator 官方下载地址
  19. 实现嵌入式linux自动同步网络时间---NTP
  20. vue通过URL传递参数

热门文章

  1. java 获取apk版本号_纯JAVA环境获取APK信息:包名,版本,版本号,大小,权限...
  2. “牛气冲天”预交卷,2022年雨花区会怎样“如虎添翼”?
  3. CCS2019:Log2vec论文阅读
  4. 算法笔记_203:第四届蓝桥杯软件类决赛真题(C语言B组)
  5. Yolov5模型使用教程
  6. Python——星期的字典1——7
  7. 局域网内ubuntu显示网络已经连接,能ping通,打不开网页
  8. 小程序开发API之生物认证(指纹)
  9. Unity演示场景枫丹白露(Fontainebleau)技术分析
  10. 【附源码】Python计算机毕业设计烹饪课程预约系统