多线程-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中又 ...
随机推荐
- springboot整合websocket后运行测试类报错:javax.websocket.server.ServerContainer not available
springboot项目添加websocket依赖后运行测试类报如下错误: org.springframework.beans.factory.BeanCreationException: Error ...
- 关于布尔值bool值
1.空或0布尔值为false,非0或非空为true 2.多个判断连在一起判断优先级:(括号)>not >and >or and: print(27 and 1>4) - ...
- loadrunner代理录制
loadrunner在使用过程中会受到浏览器版本的限制,有些web服务在低版本的浏览器上不能兼容,可通过代理录制的方式解决此问题. 注: (1)本文中的ip仅作示例,要按实际测试情况填写ip. (2) ...
- php扩展memcache和memcached区别?以及memcached软件的介绍
引用“http://www.vicenteforever.com/2012/03/memcache-different-memcached/” memcached是一个软件,而PHP包括了memcac ...
- Display all 2232 possibilities? (y or n)
Linux下我在没输入任何命令的情况下摁了两下tab键,然后就出现了这个提示:Display all 2232 possibilities? (y or n) 我觉得摁y的话就会显示所有的现阶段命令. ...
- C语言 一些算法
1,斐波那契数列 ①递归 时间复杂度O(2^n)#include <stdio.h> int fib(int n){ ||n==) ; ) + fib(n-); } int main(){ ...
- Java中常见的jar包及其主要用途
jar包 用途 axis.jar SOAP引擎包 commons-discovery-0.2.jar 用来发现.查找和实现可插入式接口,提供一些一般类实例化.单件的生命周 ...
- django 运行报错汇总
记录自己在使用django开发过程中遇到的问题,不间断更新. (1) 独立运行普通Python脚本调用django中定义的类报错 报错信息: django.core.exceptions.Improp ...
- Centos7下安装CUDA
https://developer.nvidia.com/cuda-80-ga2-download-archive https://developer.nvidia.com/rdp/cudnn-dow ...
- H01-Linux系统中搭建Hadoop和Spark集群
前言 1.操作系统:Centos7 2.安装时使用的是root用户.也可以用其他非root用户,非root的话要注意操作时的权限问题. 3.安装的Hadoop版本是2.6.5,Spark版本是2.2. ...