多线程-synchronized锁
package 多线程.synchronized锁;
/*、
*
*
*
* */
public class Sale implements Runnable {
private int m = ;
@Override
public void run() {
//保证每一个线程都必须完成,其他线程才能抢 使用同步锁 出现共享变量都要加锁 多个线程必须持有同一个锁 while (true) {
synchronized (this) { //出现共享变量都要加锁 多个线程必须持有同一个锁 synchronized同步
if(m > ) {
System.out.println(Thread.currentThread().getName() + "卖票---" + (m--) + "张");
}else {
break;
}
}
try {
Thread.sleep();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
package 多线程.synchronized锁;
/*、
*
* //同步方法
*
* */
public class Sale2 implements Runnable {
private int m = ;
// Object obj = new Object();
boolean run=true;
@Override
public void run() {
//保证每一个线程都必须完成,其他线程才能抢 使用同步锁 出现共享变量都要加锁 多个线程必须持有同一个锁 while (run) {
this.sale();
try {
Thread.sleep();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} public synchronized void sale(){
if(m > ) {
System.out.println(Thread.currentThread().getName() + "卖票---" + (m--) + "张");
}else {
// System.exit(-1); //关闭jvm虚拟机
run =false;
}
}
}
package 多线程.synchronized锁;
public class Demo02 {
public static void main(String[] args) {
Sale2 sale = new Sale2();
Thread t1 =new Thread(sale,"窗口1");
Thread t2 =new Thread(sale,"窗口2");
Thread t3 =new Thread(sale,"窗口3");
t1.start();
t2.start();
t3.start();
}
}
结果:
窗口1卖票---10张
窗口2卖票---9张
窗口3卖票---8张
窗口1卖票---7张
窗口3卖票---6张
窗口2卖票---5张
窗口2卖票---4张
窗口1卖票---3张
窗口3卖票---2张
窗口2卖票---1张
多线程-synchronized锁的更多相关文章
- 多线程-lock锁
package 多线程.lock锁; import java.util.concurrent.locks.ReentrantLock; /*. * * //同步代码块 * * */ public cl ...
- Java多线程4:synchronized锁机制
脏读 一个常见的概念.在多线程中,难免会出现在多个线程中对同一个对象的实例变量进行并发访问的情况,如果不做正确的同步处理,那么产生的后果就是"脏读",也就是取到的数据其实是被更改过 ...
- Synchronized锁性能优化偏向锁轻量级锁升级 多线程中篇(五)
不止一次的提到过,synchronized是Java内置的机制,是JVM层面的,而Lock则是接口,是JDK层面的 尽管最初synchronized的性能效率比较差,但是随着版本的升级,synchro ...
- Java多线程6:Synchronized锁代码块(this和任意对象)
一.Synchronized(this)锁代码块 用关键字synchronized修饰方法在有些情况下是有弊端的,若是执行该方法所需的时间比较长,线程1执行该方法的时候,线程2就必须等待.这种情况下就 ...
- Java多线程5:Synchronized锁机制
一.前言 在多线程中,有时会出现多个线程对同一个对象的变量进行并发访问的情形,如果不做正确的同步处理,那么产生的后果就是“脏读”,也就是获取到的数据其实是被修改过的. 二.引入Synchronized ...
- java 多线程8 : synchronized锁机制 之 方法锁
脏读 一个常见的概念.在多线程中,难免会出现在多个线程中对同一个对象的实例变量或者全局静态变量进行并发访问的情况,如果不做正确的同步处理,那么产生的后果就是"脏读",也就是取到的数 ...
- java的多线程安全,ReentrantLock与synchronized锁
前言 多线程总的来说是一个很大的模块,所以虽然之前就想写但一直感觉有地方没有理解透,在经过了一段时间学习后,终于有点感觉了,在此写下随笔. 多线程安全问题##: 首先和大家讨论一下多线程为什么会不安全 ...
- java多线程(二)——锁机制synchronized(同步方法)
synchronized Java语言的关键字,可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码.当两个并发线程访问同一个对象object中 ...
- synchronized锁自旋
http://www.jianshu.com/p/5dbb07c8d5d5 原理 通常说的synchronized在方法或块上加锁,这里的锁就是对象锁(当然也可以在类上面),或者叫重量锁,在JVM中又 ...
随机推荐
- 苹果appID的获取方法
1.登陆 iTunes Connect iTunes Connect 2.选择我的app 3.选择相应的应用 4.查看结果
- IntelliJ IDEA 配置JSP & Servlet开发环境
首先我们要安装和配置好JAVA和TOMCAT,这里不再详细描述 下载地址: JAVA:https://www.oracle.com/technetwork/java/javase/downloads/ ...
- 【flask】 学习flask macro 模板
首先 我是看着这个链接学习的 jinja2 macro官方文档 Flask开发中Macros的实践经验 Flask的Jinja2模板引擎 — 块与宏(6th) 在宏中 还可以赋值...用set标签.. ...
- JSP常用Form表单控件
[easyui]--combobox--赋值和获取选中的值 /初始化下拉选框 $('#communityIdDiv').combobox({ url:basepath+"pushContro ...
- MySQL数据库管理
好记性不如烂笔头 1.MySQL启动基本原理 /etc/init.d/mysqld 是一个shell启动脚本,启动后会调用mysqld_safe脚本,最后调用的是mysqld主程序启动mysql. 单 ...
- Java Web 热部署
热部署有多种方案,下面的方案是其中的一种. 暂时还没找到一种令人满意的方案. 1,配置WEB Server 去这里 (https://tomcat.apache.org/download-90.cgi ...
- mono for android读书笔记之硬件编程(转)
本章将会介绍: 传感器的API 加速器编程,设备的方向,近场检测 网络编程 蓝牙编程 上述的技术的应用场景很多,比如: 1.检测当前的网络是否可用,并提醒用户,检测当前的网络类型,比如Wifi.3G. ...
- JS框架设计之对象类型判断一种子模块
Javascript有两套数据类型,一套是基础数据类型,一套是对象数据类型.基础数据类型包括5种基本数据类型,分别是null,bool,undefined,number,string,也叫简单数据类型 ...
- 【es6】数组扩展
只有一个参数,为数组中的值.
- CentOS7服务管理(重启,停止,自动启动命令)
我们对service和chkconfig两个命令都不陌生,systemctl 是管制服务的主要工具, 它整合了chkconfig 与 service功能于一体. systemctl is-enable ...