package cn.chen.synchronizefunction;
/*
多线程:一个进程中有多个线程可以同时执行任务。多线程的好处:1.解决一个进程中可以同时执行多个任务的问题2.提高资源利用率多线程的弊端:1.增加了CPU的负担2.降低了进程中线程的执行概率3.出现线程安全问题4.引发死锁现象自定义线程的实现方式:方式一:1.自定义一个类继承Thread类。2.重写Thread类的run方法,把自定义线程的代码写再run方法上。3.创建Thread的子类对象,并调用start方法启动线程。注意:1.不可直接调用run方法,否则就相当于直接调用基本方法。线程安全问题解决方法:方式一:同步代码块:同步代码块的格式:synchronize(锁对象){需要被同步的代码。}方式二:同步函数:同步函数就是使用synchronized修饰一个函数.同步函数注意事项:1.如果一个非静态的同步函数的(锁 --对象)是this对象,如果是静态的同步函数(锁---对象)是当前函数所属的类字节码文件(类.class)2.同步函数的锁对象是固定的,不能由你来指定的推荐使用同步代码块:1.同步代码块的锁对象可以由我们自己随意指定,同步函数是固定的,不能由我们来指定。2.同步代码块可以很方便控制需要被同步代码的范围,同步函数必须是整个函数的所有代码全部被同步了。案例:一个银行账户5000,两夫妻一人一个卡,取钱一次只能取出1000,要求线程安全。* */
class BankTHread extends Thread{static int count = 5000;public BankTHread(String name){super(name);}@Overridepublic  void run() {// TODO Auto-generated method stubsuper.run();getMoney();}//静态函数public static synchronized void  getMoney(){while(true){if(count > 0){System.out.println(Thread.currentThread().getName()+"取走了1000,还剩余 "+(count-1000));count = count - 1000;}else{System.out.println("余额0元");break;}}}}
public class Demo {public static void main(String[] args) {// TODO Auto-generated method stubBankTHread b1 = new BankTHread("老公");BankTHread b2 = new BankTHread("老婆");b1.start();b2.start();}}

14.1 线程回顾和同步函数相关推荐

  1. JAVA-初步认识-第十三章-多线程(验证同步函数的锁)

    一. 至于同步函数用的是哪个锁,我们可以验证一下,借助原先卖票的例子 对于程序中的num,从100改为400,DOS的结果显示的始终都是0线程,票号最小都是1. 票号是没有问题的,因为同步了. 有人针 ...

  2. QT 异步函数和同步函数交换问题

    同步函数与异步函数 依据微软的MSDN上的解说: (1)   同步函数:当一个函数是同步执行时,那么当该函数被调用时不会立即返回,直到该函数所要做的事情全都做完了才返回. (2)   异步函数:如果一 ...

  3. 黑马毕向东Java课程笔记(day11):多线程(第一部分)——进程与线程+线程创建+线程安全与同步代码块+同步锁/死锁

    多线程好文:添加链接描述 锁机制:synchronized.Lock.Condition.volatile(原子性可见性)--参考添加链接描述 1.进程与线程概述   首先,对于CPU执行每一个程序, ...

  4. Win32线程安全问题.同步函数

    线程安全问题.同步函数 一丶简介什么是线程安全 通过上面几讲.我们知道了线程怎么创建.线程切换的原理(CONTEXT结构) 每个线程在切换的时候都有自己的堆栈. 但是这样会有安全问题. 为什么?  我 ...

  5. 用于线程间的同步与互斥-信号量sem

    一.线程 首先我们说一下什么是线程.线程是计算机中独立运行的最小单位,在运行时占用很少的系统资源,由于每个线程占用的CPU时间是由系统分配的,因此我们可以把线程看作为系统分配CPU时间的基本单位.在我 ...

  6. 多线程学习二之线程之间实现同步

    上篇博客回顾: 1.线程与进程区别:进程是所有线程的集合,线程是进程中的一条执行路径 2.为什么要使用多线程:提高程序效率 3.多线程应用场景:提高程序运行效率,比如迅雷 分批处理数据 4.多线程创建 ...

  7. 14.4 线程通讯-生产者与消费者

    package cn.chen.threadcommunication; /* 线程通讯:一个线程完成了自己的任务时,要通知另外一个线程去完成另一个任务.生产者与消费者wait(); 等待如果线程执行 ...

  8. 多线程(同步代码块和同步函数)

    线程安全问题 当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完,     另一个线程参与进来执行.导致共享数据的错误. 解决办法:     对多条操作共享数据的语句 ...

  9. linux 线程管理、同步机制等

    线程 学了那么多有关进程的东西,一个作业从一个进程开始,如果你需要执行其他的东西你可以添加一些进程,进程之间可以通信.同步.异步.似乎所有的事情都可以做了. 对的,进程是当初面向执行任务而开发出来的, ...

最新文章

  1. Kickstart的配置文件anaconda-ks.cfg解析
  2. C++如何监听http请求
  3. 使用OpenCV检测图像中的矩形
  4. [云炬创业管理笔记]第十章商业计划书答辩测试2
  5. 信息学奥赛一本通(C++)在线评测系统——基础(二)基础算法 —— 1312:【例3.4】昆虫繁殖
  6. 2.5 隐藏委托关系
  7. 《R语言数据挖掘》----1.15 结果可视化
  8. 手机连接蓝牙扫码枪_原来手机蓝牙的隐藏功能这么多,你不会还只用来连接耳机吧?...
  9. mysql技术大会2020_2020年数据库技术大会助力技术提升
  10. toCharArray()和 charAt()的用法
  11. python函数格式化_Python通过format函数格式化显示值
  12. 使用Python查看汉诺塔移动详细过程
  13. python连接池框架_Python中的连接池是非常重要的!神级程序员详解!
  14. Golang的time包的应用
  15. 给定一个序列,判断该序列是否为二叉树查找树的后序遍历序列
  16. matlab读取地震波数据,基于Matlab的人工地震波程序编写
  17. 工具答疑---beyond compar文件无法编辑
  18. python k线斜率计算公式_浅析K线上涨斜率
  19. Gartner2021年网络技术成熟度曲线
  20. MongoDB中的_id和ObjectId

热门文章

  1. 昼猫笔记 从此告别复杂代码--JavaScript
  2. 孔子绝粮于陈蔡子贡孔子问答节选(白话)
  3. swift 基础学习之属性修饰符
  4. Laravel 源码解读:php artisan make:auth
  5. C语言指针(个人的认识)
  6. 原创哈希数据导出算法
  7. Android Service详解(二)第一个Service
  8. VS2005快捷键大全
  9. URAL 1009. K-based Numbers
  10. “网络爸爸”的密码破解