14.1 线程回顾和同步函数
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 线程回顾和同步函数相关推荐
- JAVA-初步认识-第十三章-多线程(验证同步函数的锁)
一. 至于同步函数用的是哪个锁,我们可以验证一下,借助原先卖票的例子 对于程序中的num,从100改为400,DOS的结果显示的始终都是0线程,票号最小都是1. 票号是没有问题的,因为同步了. 有人针 ...
- QT 异步函数和同步函数交换问题
同步函数与异步函数 依据微软的MSDN上的解说: (1) 同步函数:当一个函数是同步执行时,那么当该函数被调用时不会立即返回,直到该函数所要做的事情全都做完了才返回. (2) 异步函数:如果一 ...
- 黑马毕向东Java课程笔记(day11):多线程(第一部分)——进程与线程+线程创建+线程安全与同步代码块+同步锁/死锁
多线程好文:添加链接描述 锁机制:synchronized.Lock.Condition.volatile(原子性可见性)--参考添加链接描述 1.进程与线程概述 首先,对于CPU执行每一个程序, ...
- Win32线程安全问题.同步函数
线程安全问题.同步函数 一丶简介什么是线程安全 通过上面几讲.我们知道了线程怎么创建.线程切换的原理(CONTEXT结构) 每个线程在切换的时候都有自己的堆栈. 但是这样会有安全问题. 为什么? 我 ...
- 用于线程间的同步与互斥-信号量sem
一.线程 首先我们说一下什么是线程.线程是计算机中独立运行的最小单位,在运行时占用很少的系统资源,由于每个线程占用的CPU时间是由系统分配的,因此我们可以把线程看作为系统分配CPU时间的基本单位.在我 ...
- 多线程学习二之线程之间实现同步
上篇博客回顾: 1.线程与进程区别:进程是所有线程的集合,线程是进程中的一条执行路径 2.为什么要使用多线程:提高程序效率 3.多线程应用场景:提高程序运行效率,比如迅雷 分批处理数据 4.多线程创建 ...
- 14.4 线程通讯-生产者与消费者
package cn.chen.threadcommunication; /* 线程通讯:一个线程完成了自己的任务时,要通知另外一个线程去完成另一个任务.生产者与消费者wait(); 等待如果线程执行 ...
- 多线程(同步代码块和同步函数)
线程安全问题 当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完, 另一个线程参与进来执行.导致共享数据的错误. 解决办法: 对多条操作共享数据的语句 ...
- linux 线程管理、同步机制等
线程 学了那么多有关进程的东西,一个作业从一个进程开始,如果你需要执行其他的东西你可以添加一些进程,进程之间可以通信.同步.异步.似乎所有的事情都可以做了. 对的,进程是当初面向执行任务而开发出来的, ...
最新文章
- Kickstart的配置文件anaconda-ks.cfg解析
- C++如何监听http请求
- 使用OpenCV检测图像中的矩形
- [云炬创业管理笔记]第十章商业计划书答辩测试2
- 信息学奥赛一本通(C++)在线评测系统——基础(二)基础算法 —— 1312:【例3.4】昆虫繁殖
- 2.5 隐藏委托关系
- 《R语言数据挖掘》----1.15 结果可视化
- 手机连接蓝牙扫码枪_原来手机蓝牙的隐藏功能这么多,你不会还只用来连接耳机吧?...
- mysql技术大会2020_2020年数据库技术大会助力技术提升
- toCharArray()和 charAt()的用法
- python函数格式化_Python通过format函数格式化显示值
- 使用Python查看汉诺塔移动详细过程
- python连接池框架_Python中的连接池是非常重要的!神级程序员详解!
- Golang的time包的应用
- 给定一个序列,判断该序列是否为二叉树查找树的后序遍历序列
- matlab读取地震波数据,基于Matlab的人工地震波程序编写
- 工具答疑---beyond compar文件无法编辑
- python k线斜率计算公式_浅析K线上涨斜率
- Gartner2021年网络技术成熟度曲线
- MongoDB中的_id和ObjectId