36. 解决线程问题方式一(同步代码块synchronized)
解决线程问题:
方式一:同步代码块(synchronized)
语法:
          synchronized ("锁对象") {
              //需要锁定的代码
           }
解决线程安全问题原理:
当我们使用同步代码块时,就当与给此段语句上了一个锁,当一个线程A进去的时候,锁的状态会从开变成关,后面的线程是进不来的。
当进去的线程A执行完里面的代码时,锁的状态才会从关变成开,后面的线程才能进来。
同步代码块需要注意事项:
1.任何一个对象都可以作为一个锁对象
2.在同步代码块中调用sleep对象并不是释放锁对象
3.只有在正真需要使用代码块时才使用,否则会降低效率
4.多线程操作的所对象必须时唯一共享的。否者无效
5.锁住的代码最好是操作同一个共享资源的代码
修改代码如下:
//模拟3个窗口同时售票
class SaleTicket extends Thread{
//定义票数
static int num = 50;
public SaleTicket(String name) {
super(name);
}
@Override
public void run() {
while (true) {
if(num>0) {
synchronized ("票数") {
System.out.println(Thread.currentThread().getName()+"买了"+num+"号票");
num--;
}
}else {
System.out.println(Thread.currentThread().getName()+"票卖完了");
break;
}
}
}
} public class Demo5 {
public static void main(String[] args) {
SaleTicket sale1 = new SaleTicket("窗口1");
SaleTicket sale2 = new SaleTicket("窗口2");
SaleTicket sale3 = new SaleTicket("窗口3");
sale1.start();
sale2.start();
sale3.start(); }
}
36. 解决线程问题方式一(同步代码块synchronized)的更多相关文章
- java多线层同时运行的解决,同步代码块synchronized
		
/* 多个线层同时操作一个数据 会导制数据超出 同步代码块 synchronized(对像) { 需要同步的代码 } */ class Do7 { public static void main(St ...
 - java 线程 (三)线程并发的安全性 同步代码块
		
package cn.sasa.demo1; import java.util.concurrent.ExecutionException; public class ThreadDemo { pub ...
 - 彻底理解线程同步与同步代码块synchronized
		
public class Demo { public static synchronized void fun1(){ } public synchronized void fun2(){ } pub ...
 - java 多线程:线程通信-等待通知机制wait和notify方法;(同步代码块synchronized和while循环相互嵌套的差异);管道通信:PipedInputStream;PipedOutputStream;PipedWriter; PipedReader
		
1.等待通知机制: 等待通知机制的原理和厨师与服务员的关系很相似: 1,厨师做完一道菜的时间不确定,所以厨师将菜品放到"菜品传递台"上的时间不确定 2,服务员什么时候可以取到菜,必 ...
 - Java 同步代码块 - Synchronized Blocks
		
java锁实现原理: http://blog.csdn.net/endlu/article/details/51249156 The synchronized keyword can be used ...
 - 线程同步 synchronized 同步代码块 同步方法 同步锁
		
一 同步代码块 1.为了解决并发操作可能造成的异常,java的多线程支持引入了同步监视器来解决这个问题,使用同步监视器的通用方法就是同步代码块.其语法如下: synchronized(obj){ // ...
 - Java基础8-多线程;同步代码块
		
作业解析 利用白富美接口案例,土豪征婚使用匿名内部类对象实现. interface White{ public void white(); } interface Rich{ public void ...
 - Java之同步代码块处理实现Runnable的线程安全问题
		
/** * 例子:创建三个窗口卖票,总票数为100张.使用实现Runnable接口的方式 * * 1.问题:卖票过程中,出现了重票.错票 -->出现了线程的安全问题 * 2.问题出现的原因:当某 ...
 - 线程的同步机制:同步代码块&同步方法
		
解决存在的线程安全问题:打印车票时出现重票,错票 使用同步代码块的解决方案 TestWindow2 package com.aff.thread; /* 使用实现Runnable接口的方式,售票 存在 ...
 
随机推荐
- Pyinstaller 打包exe 报错 "failed to execute script XXX"的一种解决方案
			
最近用PyQt5写了一个界面小程序,需要打包成exe给到其他windows上使用,一开始使用python 3.7 64位,用pyinstaller打包exe,在64位机上运行正常. 但是目标电脑是32 ...
 - ios执行失去焦点,不执行点击事件
			
原因:由于JavaScript为单线程,同一时间只能执行处理一个事件.“blur优先于click执行”.而在本示例中,由于blur处理程序,会将对下拉框展示区隐藏,所以导致其后续click事件并不会执 ...
 - _declspec(dllexport)和.def(转)
			
节选自:windows下编译和使用动态库dll http://blog.eonew.cn/archives/865 Microsoft 在 Visual C++ 的 16 位编译器版本中引入了 __e ...
 - element  的时间快捷键
			
1. <div> <el-date-picker v-model="value4" type="month" :picker-options= ...
 - Tmux 简单配置使用
			
Tmux Prefix (prefix) Tmux 使用 Prefix 以将自身的快捷键与其它应用区分,运行 Tmux 快捷键时首先按下这个 Prefix (默认是 Ctrl-b 组合键),松手后紧接 ...
 - IntelliJ IDEA2016.1 + maven 创建java web 项目[转]
			
最近开始使用idea 来写java项目了,这个很流行,相比Eclipse方便了很多.功能多了,相对应的使用的复杂度也较高了,因为网上很多的使用和创建项目的简单教程,都是基于老版本的,每个新版本都有不一 ...
 - 【NOI2019模拟2019.6.29】字符串(SA|SAM+主席树)
			
Description: 1<=n<=5e4 题解: 考虑\(f\)这个东西应该是怎样算的? 不妨建出SA,然后按height从大到小启发式合并,显然只有相邻的才可能成为最优答案.这样的只 ...
 - 行内元素与块级元素的区别,行内块级元素在IE8-的兼容性
			
行内元素与块级元素的区别 行内元素最好不要包裹块级元素,但是块级元素可以任意的包裹行内元素 行内元素如果其上一个元素也是行内元素,则他们会分布在统一水平线上,即在一行上排列,块级元素不论上一个元素是行 ...
 - 炼数成金数据分析课程---10、python中如何画图
			
炼数成金数据分析课程---10.python中如何画图 一.总结 一句话总结: 主要matplotlib库,pandas中也可以画一些基础图 大纲+实例快速学习法 1.matplotlib的最简单画图 ...
 - php5模块pdo、pdo_mysql、mysqli的添加
			
一.环境LAMP都是源码安装,PHP安装的时候没有配置pdo_mysql和mysqli,pdo是php5默认带的.PHP5的源码都在,只需要把php5的模块功能扩展就可以了. php源码目录:/usr ...