顺序出现问题的原因??
class Demo
{
public static void main(String[] args)
{
Ticket t=new Ticket();
Thread t1=new Thread(t);
Thread t2=new Thread(t);
t1.start();
try{Thread.sleep(10);}catch(Exception e){}
t.flag=false;
t2.start();
}
}
class Ticket implements Runnable
{ Object o=new Object();
private int num=100;
boolean flag=true;
public synchronized void show(){if(num>0){
System.out.println("售票台"+Thread.currentThread().getName()+"...sale1..."+num--);
}
}
public void run(){
if(flag){
while(true){
synchronized(o){
if(num>0){
System.out.println("售票台"+Thread.currentThread().getName()+"...sale2..."+num--);
}
}
}
}else{ while(true){
this.show();
}
}
}
}
出现了这种情况

我知道是因为用的不是一个锁但是出现顺序错误的原理是啥??
{
public static void main(String[] args)
{
Ticket t=new Ticket();
Thread t1=new Thread(t);
Thread t2=new Thread(t);
t1.start();
try{Thread.sleep(10);}catch(Exception e){}
t.flag=false;
t2.start();
}
}
class Ticket implements Runnable
{ Object o=new Object();
private int num=100;
boolean flag=true;
public synchronized void show(){if(num>0){
System.out.println("售票台"+Thread.currentThread().getName()+"...sale1..."+num--);
}
}
public void run(){
if(flag){
while(true){
synchronized(o){
if(num>0){
System.out.println("售票台"+Thread.currentThread().getName()+"...sale2..."+num--);
}
}
}
}else{ while(true){
this.show();
}
}
}
}
出现了这种情况

我知道是因为用的不是一个锁但是出现顺序错误的原理是啥??
...全文
相关推荐
kepware关联变量高低顺序问题
##### 3.2 问题原因分析在KEPWARE中配置S7-200 PLC变量时出现高低顺序问题的原因主要有以下几点:- **配置不一致**:KEPWARE中布尔型变量默认采用16位表示法,而S7-200
栈的出栈顺序问题
栈的出栈顺序问题栈是一种基本的数据结构,栈的出栈顺序问题是计算机科学中一个经典的问题。栈有两种最重要的操作,即 pop(从栈顶弹出一个元素)和 push(将一个元素进栈)。
vue 解决遍历对象显示的顺序不对问题
在Vue模板中遍历这个对象并显示键时,显示的顺序可能并不是数组的原始顺序。原因在于JavaScript引擎处理对象的方式。对象的属性访问是基于哈希表的,这意味着属性的插入顺序并不会被保留。
详解canvas绘制多张图的排列顺序问题
当需要在Canvas上绘制多张图片时,可能会遇到一个排列顺序的问题,特别是当图片大小不一或者图片源跨域时。这个问题的核心在于图片加载的异步性质,可能导致图片的绘制顺序与预期不符。
解决循环中setTimeout执行顺序的问题
解决循环中setTimeout执行顺序的问题本文旨在解决JavaScript中的循环中setTimeout执行顺序的问题,并提供了多种解决方法。


