java thirteen线程同步机制
2019独角兽企业重金招聘Python工程师标准>>>
解决资源共享问题的方法一般是在指定时间段内只允许一个线程访问共享资源,这时就需要给共享资源上一道锁,比如售票员售票,当一个售票员在售第X张票时,就把资源X锁住了,直到售票结束。
线程同步的方法:
1、同步块
synchronized(object){
} //object:同步块锁定的对象,不允许同一时间共享的资源
package Thirteen;public class ThreadSafeTest extends Thread {/*Integer i=0; i是一个对象 int i=3; i是一个基础变量 */private static Integer num = 1;public ThreadSafeTest(String name){//void java.lang.Thread.setName(String name)setName(name);}@Overridepublic void run(){synchronized(num){if(num>0){System.out.println(getName()+":检测票数大于0,可以出票");System.out.println(getName()+":\t正在收款(大约5秒)……");try{Thread.sleep(5000);System.out.println(getName()+":\t售票完成");num--;System.out.println("系统当前票数:"+num);if(num<0)System.out.println("警告:无票");}catch(InterruptedException e){e.printStackTrace();}}else{System.out.println("无票,停止销售");}}} public static void main(String[] args){try{new ThreadSafeTest("售票员A").start();Thread.sleep(2000);new ThreadSafeTest("售票员B").start();}catch(InterruptedException e){e.printStackTrace();}}
}
2、同步方法
synchronized void syncMethod(){
}
package Thirteen;public class ThreadSafeTest extends Thread {/*Integer i=0;
i是一个对象 int i=3; i是一个基础变量 */private static Integer num = 1;public ThreadSafeTest(String name){//void java.lang.Thread.setName(String name)setName(name);}@Overridepublic void run(){sell(getName());}//synchronized(num)private static synchronized void sell(String name) {if(num>0){System.out.println(name+":检测票数大于0,可以出票");System.out.println(name+":\t正在收款(大约5秒)……");try{Thread.sleep(5000);System.out.println(name+":\t售票完成");num--;System.out.println("系统当前票数:"+num);if(num<0)System.out.println("警告:无票");}catch(InterruptedException e){e.printStackTrace();}}else{System.out.println("无票,停止销售");}}public static void main(String[] args){try{new ThreadSafeTest("售票员A").start();Thread.sleep(2000);new ThreadSafeTest("售票员B").start();}catch(InterruptedException e){e.printStackTrace();}}
} //程序运行结果同上
转载于:https://my.oschina.net/doudoulee/blog/639571
java thirteen线程同步机制相关推荐
- Java高级-线程同步机制实现
2019独角兽企业重金招聘Python工程师标准>>> 前言 我们可以在计算机上运行各种计算机软件程序.每一个运行的程序可能包括多个独立运行的线程(Thread). 线程(Threa ...
- Java多线程之线程同步机制(锁,线程池等等)
Java多线程之线程同步机制 一.概念 1.并发 2.起因 3.缺点 二.三大不安全案例 1.样例一(模拟买票场景) 2.样例二(模拟取钱场景) 3.样例三(模拟集合) 三.同步方法及同步块 1.同步 ...
- 学习java的第四十天,线程的优先级、守护线程、线程同步机制、死锁
一.线程的优先级(priority) Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器按照优先级决定应该调度哪个线程来执行. 线程的优先级用数字表示,范围1~10 Thr ...
- 对Java多线程编程的初步了解,实现多线程的三种方式以及多线程并发安全的线程同步机制
什么叫进程?什么叫线程? 进程相当于一个应用程序,线程就是进程中的一个应用场景或者说是一个执行单元,一个进程可以启动多个线程,每个线程执行不同的任务,一个线程不能单独存在,他必须是进程的一部分,当进程 ...
- Java多线程的同步机制(synchronized)
一段synchronized的代码被一个线程执行之前,他要先拿到执行这段代码的权限,在 java里边就是拿到某个同步对象的锁(一个对象只有一把锁): 如果这个时候同步对象的锁被其他线程拿走了,他(这个 ...
- JAVA中线程同步的方法(7种)汇总
JAVA中线程同步的方法(7种)汇总 同步的方法: 一.同步方法 即有synchronized关键字修饰的方法. 由于java的每个对象都有一个内置锁,当用此关键字修饰方法时, 内置锁会保护整个方法. ...
- 解析JVM线程同步机制
http://blog.csdn.net/thl789/article/details/566494 对多线程的支持一般是在OS级的,而Java将其做在了语言级别,这其中最吸引人的莫过于Java对线程 ...
- Java基础 线程同步
线程的同步:在编程过程中,为了防止多线程访问共享资源时发生冲突,Java提供了线程同步机制.所谓同步,就是指一个线程等待另一个线程操作完再继续的情况. 线程安全:一个类很好地同步以保护它的数据,这个类 ...
- JAVA中线程同步的几种实现方法
JAVA中线程同步的几种实现方法 一.synchronized同步的方法: 1.synchronized同步方法 即有synchronized关键字修饰的方法. 由于java的每个对象都有一个内置锁, ...
最新文章
- vmware响应时间过长_性能调优高并发下如何缩短响应时间
- BugKuCTF 杂项 这是一张单纯的图片
- mysql如何实现acid中的a_MySQL如何实现事务的ACID
- 783. 二叉搜索树节点最小距离(dfs)
- 给不会调用C++STL库中二分函数lower_bound,upper_bound,binary_search同学的一些话!
- Android的屏幕适配之图片加载适配
- 随想录(png的读取和显示)
- 能力不错的大厂高 P,为什么过不了小厂的试用期?
- group python 读hdf5_Python处理Excel模块的对比分析
- java8 function 多线程安全_Java8新特性_传统时间格式化的线程安全问题
- Pytorch安装步骤
- 后缀数组算法概述及习题
- 逻辑回归卡方拟合优度检验 r语言
- three.js尝试(一)模拟演唱会效果
- 如何向外行讲解 2G、3G 和 4G LTE 的区别?
- 全网最全java Springboot对接微信公众号开发平台(可能是最全)!
- Git详细使用大全- rebase, merge, switch, cherry-pick, tag
- Android总笔记(未全)
- Excel-VBA 快速上手(十一、字符串常用操作)
- 索尼 LT26I刷机包 X.I.D 增加官方风格 GF A3.9.4 各方面完美