synchronized 同步代码块,售票问题
package cn.ljs.FristSync;
public class SalerDemo extends Thread {
static int tickets = 1000;
String name;
static Object lock = new Object();
public SalerDemo(String name) {
this.name = name;
}
public void run(){
while(true){
synchronized (lock) {
if (tickets < 1) {
return ;
}
System.out.println(name + ": " + tickets);
tickets--;
}
}
}
public static void main(String[] args) {
Thread t1 = new SalerDemo("saler1");
Thread t2 = new SalerDemo("saler2");
Thread t3 = new SalerDemo("saler3");
t1.start();
t2.start();
t3.start();
}
}
建立票池
package cn.ljs.FristSync;
public class SalerDemo01 extends Thread{
private String name;
private TicketsPool pool;
public SalerDemo01(String name, TicketsPool pool){
this.name = name;
this.pool = pool;
}
public void run(){
while (true){
int num = pool.getTickets();
if (num != ) {
System.out.println(name+"卖了"+num);
}else {
return;
}
}
}
public static void main(String[] args) {
TicketsPool pool = new TicketsPool();
SalerDemo01 saler1 = new SalerDemo01("", pool);
SalerDemo01 saler2 = new SalerDemo01("", pool);
SalerDemo01 saler3 = new SalerDemo01("", pool);
saler1.start();
saler2.start();
saler3.start();
}
}
class TicketsPool{
private int num = ;
public int getTickets(){
synchronized (this) {
int tmp = num;
num--;
return tmp > ? tmp:;
}
}
}
synchronized 同步代码块,售票问题的更多相关文章
- 59、synchronized同步代码块
synchronized同步方法的问题 有些情况下,在方法上面加synchronized同步,会有性能问题.请看下面代码,来计算下两个线程执行的耗时: package com.sutaoyu.Thre ...
- 线程同步 synchronized 同步代码块 同步方法 同步锁
一 同步代码块 1.为了解决并发操作可能造成的异常,java的多线程支持引入了同步监视器来解决这个问题,使用同步监视器的通用方法就是同步代码块.其语法如下: synchronized(obj){ // ...
- synchronized(){}同步代码块笔记(新手笔记,欢迎纠正)
/* 内容:同步代码块,目的是解决多线程中的安全问题.什么安全问题呢??就是在执行run方法时,假如线程-0刚刚获得执行权, *还没执行时,就挂那了,这时线程-1获得执行权,并进行执行,就有可能出现负 ...
- java中的synchronized同步代码块和同步方法的区别
下面这两段代码有什么区别? //下列两个方法有什么区别 public synchronized void method1(){} public void method2(){ synchronized ...
- 线程执行synchronized同步代码块时再次重入该锁过程中抛异常,是否会释放锁
一个线程执行synchronized同步代码时,再次重入该锁过程中,如果抛出异常,会释放锁吗? 如果锁的计数器为1,抛出异常,会直接释放锁: 那如果锁的计数器为2,抛出异常,会直接释放锁吗? 来简单测 ...
- synchronized同步代码块锁释放
今天发现自己写的线上程序出现数据库不能同步的问题,查看日志已经停止记录,随后使用jstack查看线程的运行状况,发现有个同步线程锁住了. 以下是jstack -l 637 问题线程的内容. &quo ...
- java中多线程模拟(多生产,多消费,Lock实现同步锁,替代synchronized同步代码块)
import java.util.concurrent.locks.*; class DuckMsg{ int size;//烤鸭的大小 String id;//烤鸭的厂家和标号 DuckMsg(){ ...
- Java:多线程,线程同步,synchronized关键字的用法(同步代码块、非静态同步方法、静态同步方法)
关于线程的同步,可以使用synchronized关键字,或者是使用JDK 5中提供的java.util.concurrent.lock包中的Lock对象.本文探讨synchronized关键字. sy ...
- java多线程(三)——锁机制synchronized(同步语句块)
用关键字synchronized声明方法在某些情况下是有弊端的,比如A线程调用同步方法之行一个长时间的任务,那么B线程必须等待比较长的时间,在这样的情况下可以使用synchronized同步语句快来解 ...
随机推荐
- Android开发中adb启动失败adb连接异常的解决办法
一.情况描述: 我们在使用eclipse开发有时候会出现adb连接异常中,有时候控制台会打印出来 adb connect异常 比如会出现下面这样 : [2014-12-18 16:18:26 ...
- iOS 测试版系统安装说明(粗略翻译)
我们常常看到在https://developer.apple.com/download/这里会有beta版本的ios系统 或者开发软件 关于beta版本的应用,其实有很大用处,好多人会在正式版没有发布 ...
- Eclipse Indigo 3.7.0 安装GIT插件提示 requires 'bundle org.eclipse.team.core(转)
错误提示: Cannot complete the install because one or more required items could not be found.Software bei ...
- 10.翻译系列:EF 6中的Fluent API配置【EF 6 Code-First系列】
原文链接:https://www.entityframeworktutorial.net/code-first/fluent-api-in-code-first.aspx EF 6 Code-Firs ...
- Spring开发工具Spring Tools Suite(STS)
The Spring Tool Suite is an Eclipse-based development environment that is customized for developing ...
- Badboy教程
Badboy教程 摘自:Badboy-系列教程-资料整理 2016-11-30 1 界面介绍 2 录制 3 创建suites,tests,steps和Template 4 运行脚本 5 参数化 Add ...
- hdoj:2045
#include <iostream> using namespace std; ]; int main() { int n; a[] = ; a[] = ; a[] = ; ; i &l ...
- Vue:Vue2.0搭建脚手架
随着Vue.js越来越火爆,更多的项目都用到Vue进行开发,在实际的开发项目中如何搭建脚手架呢?今天就来跟大家分享一下如何使用vue-cli搭建脚手架. 一.安装node.js 1.进入官网https ...
- openCV函数
1.cvInitFont ,, ); font 被初始化的字体结构体. font_face 字体名称标识符.只是Hershey 字体集( http://sources.isc.org/utils/mi ...
- Android Studio下jni应用
最近在将一个小应用从eclipse开发迁移到android studio,程序中有native代码实现,在eclipse是靠Android.mk这么个mk文件来组织编译的,但到android stud ...