案例:

假设有四个人,频繁地通过海关出口,规定每次只能通过一个人,通过一个人时,将通过海关的总人次加1,同时记录该次通过人的姓名和出生地,如果出生地和名字不一致,不允许通过。

海关代码

package com.jane.service;/*** 海关入口*/
public class GateWay {private int counter = 0;private String name = "无名";private String address = "无地址";
# /*** 通行* @param name* @param address*/public void pass(String name, String address) {this.counter++;this.name = name;this.address = address;checkPassport();}/*** 检查护照*/private void checkPassport() {//名字和地址匹配上才能通过if(!this.name.equals(this.address)) {System.out.println("禁止通行:" + "第" + this.counter + "人,姓名:" + this.name + ",来自:" + this.address);}}}

人的代码

package com.jane.service;/*** 人模拟线程,循环入关*/
public class Person extends Thread{private final GateWay gateWay;private final String name;private final String address;public Person(GateWay gateWay, String name, String address) {this.gateWay = gateWay;this.name = name;this.address = address;}public void run() {System.out.println(this.name + ",开始入关");while(true) {this.gateWay.pass(this.name, this.address);}}
}

启动函数

System.out.println("开始入关");GateWay gate = new GateWay();new Person(gate, "张三", "张三").start();new Person(gate, "李四", "李四").start();new Person(gate, "王五", "王五").start();new Person(gate, "赵六", "赵六").start();

运行结果

线程不安全!!!!!!!!!!!!

优化后(synchronized),线程安全

转载于:https://blog.51cto.com/janephp/2395635

多线程(一、线程安全案例)相关推荐

  1. 秒杀多线程第十六篇 多线程十大经典案例之一 双线程读写队列数据

    本文配套程序下载地址为:http://download.csdn.net/detail/morewindows/5136035 转载请标明出处,原文地址:http://blog.csdn.net/mo ...

  2. Java多线程02(线程安全、线程同步、等待唤醒机制)

    Java多线程2(线程安全.线程同步.等待唤醒机制.单例设计模式) 1.线程安全 如果有多个线程在同时运行,而这些线程可能会同时运行这段代码.程序每次运行结果和单线程运行的结果是一样的,而且其他的变量 ...

  3. java timer 线程安全_多线程之 线程安全与控制

    线程控制 wait和notify方法需要注意的细节:wait方法与notify方法必须要由同一个锁对象调用.因为:对应的锁对象可以通过notify唤醒使用同一个锁对 象调用的wait方法后的线程. w ...

  4. 多线程 空值线程数_【开发者成长】深入理解多线程编程

    云栖号资讯:[点击查看更多行业资讯] 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 为什么要使用多线程? 防止并发编程出错最好的办法就是不写并发程序 既然多线程编程容易出错,为什么它 ...

  5. Java多线程开发系列之四:玩转多线程(线程的控制2)

    在上节的线程控制(详情点击这里)中,我们讲解了线程的等待join().守护线程.本节我们将会把剩下的线程控制内容一并讲完,主要内容有线程的睡眠.让步.优先级.挂起和恢复.停止等. 废话不多说,我们直接 ...

  6. 爬虫——多线程糗事百科案例

    Queue(队列对象) Queue是python中的标准库,可以直接import Queue引用;队列是线程间最常用的交换数据的形式 python下多线程的思考 对于资源,加锁是个重要的环节.因为py ...

  7. Android工程师进阶第五课 多线程锁,线程池和DVM/ART优化

    第09讲:Java 线程优化 偏向锁,轻量级锁.重量级锁 我目前所在的公司是一家跨国企业,总部在瑞典.前段时间公司新开发的一个应用准备发布到应用宝平台.但是在发布之前,需要准备一系列软著相关的证明材料 ...

  8. delphiXE关于线程和多线程、线程的同步与异步执行

    delphiXE关于线程和多线程.线程的同步与异步执行 一.最好的参照案例 {$BDS}\source\fmx\FMX.Helpers.Android.pas 如下四个独立方法: type   TMe ...

  9. Linux 多线程开发(附有案例代码)

    一.线程概述 1.线程概念 与进程(process)类似,线程(thread)是允许应用程序并发执行多个任务的一种机制.一个进程可以包含多个线程.同一个程序中的所有线程均会独立执行相同程序,且共享同一 ...

  10. Linux多线程编程---线程间同步(互斥锁、条件变量、信号量和读写锁)

    本篇博文转自http://zhangxiaoya.github.io/2015/05/15/multi-thread-of-c-program-language-on-linux/ Linux下提供了 ...

最新文章

  1. 关于 Error: No PostCSS Config found in 的错误
  2. Zookeeper集群角色分配原理
  3. C语言指针:从底层原理到花式技巧,用图文和代码帮你讲解透彻
  4. 获取天气html,使用htmlparser获取sohu的天气预报
  5. 《Groovy in Action》笔记
  6. STC51-键盘检测
  7. Html.Partial vs Html.RenderPartial&Html.Action vs Html.RenderAction
  8. Codeforces 1043F(容斥+dp)
  9. 用java做一个简易的五子棋
  10. 你必须知道的 NET(第2版)
  11. 2020-04-27
  12. 正确开启用户实体行为分析(UEBA)番外篇:SIEM与UEBA
  13. [Python从零到壹] 四十五.图像增强及运算篇之图像灰度非线性变换详解
  14. Django书籍下载地址收集
  15. 太牛了!华为天才少年稚晖君又自制硬萌机器人,代码开源了
  16. java enum枚举型使用
  17. 顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
  18. Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。(python)
  19. 基于Spark的大数据精准营销中搜狗搜索引擎的用户画像挖掘
  20. inet_aton、inet_ntoa、inet_pton和inet_ntop

热门文章

  1. Linux日志系统-01:什么是rsyslog?
  2. 扇区、磁盘块、页、页框、缓冲区之间的关系!
  3. linux下挂载和卸载的命令的用法:mount 、umount
  4. int *p=NULL; *p=9;是错误的!
  5. Nanopi NEO Air串口代码
  6. 常考数据结构与算法:每k个节点反转链表
  7. 线程:synchronized
  8. new Date(2019-05-10 08:00:00) 格式在IE内核或者低版本浏览器中显示NaN或者Invalid Date的问题...
  9. 利刃 MVVMLight 7:命令深入
  10. mysql 隔离级别和锁相关