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接口的方式,售票 存在 ...
随机推荐
- myEclipse 搭建 Spring boot+myBatis+maven 项目流程
1.新建一个工程 new-->maven project-->next-->next-->在filter中搜索webapp-->group id.Artifact id- ...
- org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/json;charset=UTF-8' not supported
最后找到我的问题,springmvc配置文件中没加 <mvc:annotation-driven/> java代码: @RequestMapping(value="/reques ...
- 前后端分离进行权限管理之后端API返回菜单及权限信息(三)
一.动态菜单API的生成 1.API #菜单信息 url(r'^menus$', views.MenuModelView.as_view({"get": "list&qu ...
- Flume速览
Flume是一个分布式的.可靠的.高可用的海量日志采集.聚合和传输的系统.Java实现,插件丰富,模块分明. 数据流模型:Source-Channel-Sink 事务机制保证了消息传递的可靠性 一.基 ...
- 深入理解Magento – 第二章 – Magento请求分发与控制器
深入理解Magento 作者:Alan Storm 翻译:Hailong Zhang 第二章 – Magento请求分发与控制器 Model-View-Controller (MVC) ,模型-视图- ...
- 【TCP】SYN攻击
TCP握手协议 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接.第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确 ...
- Robot Framework:数据库操作
robotframework 操作数据库,需要安装DatabaseLibrary库 pip install robotframework-databaselibrary Python操作不同的数据库, ...
- 揭秘阿里云EB级大数据计算引擎MaxCompute
日前,全球权威咨询与服务机构Forrester发布了<The Forrester WaveTM: Cloud Data Warehouse, Q4 2018>报告.这是Forrester ...
- 天梯L3-003. 社交集群——并查集
在社交网络平台注册时,用户通常会输入自己的兴趣爱好,以便找到和自己兴趣相投的朋友.有部分兴趣相同的人们就形成了“社交集群”.现请你编写程序,找出所有的集群. 输入格式: 输入的第一行给出正整数N(&l ...
- flask 的orm
https://www.cnblogs.com/chichung/p/9794702.html