加入同步代码块解决线程安全问题--不熟练

package com.bjpowernode.t15;

/**
* 电影票
*/
public class Ticket implements Runnable {

// 电影票总数
private int num = 100;

private int maoyan;

@Override
public void run() {
while (true) {

// 加入同步代码块解决线程安全问题
synchronized (this) {
// 当电影票售罄后,跳出循环不再执行
if (num <= 0) {
break;
} else {
if ("猫眼电影".equals(Thread.currentThread().getName())) {
maoyan++;
}
// 表示卖出了一张票
num--;
System.out.println(Thread.currentThread().getName() + "卖出了一张,剩余:" + num);
}
}

}
if ("猫眼电影".equals(Thread.currentThread().getName())) {
System.out.println("猫眼电影卖了" + maoyan + "张");
}

}

}

-------------------------

package com.bjpowernode.t15;

public class Test {

public static void main(String[] args) {
//创建电影票的对象
Ticket ticket = new Ticket();

//创建三个公司(线程)售卖电影票
Thread t1 = new Thread(ticket,"猫眼电影");
Thread t2 = new Thread(ticket,"糯米电影");
Thread t3 = new Thread(ticket,"美团电影");
t1.start();
t2.start();
t3.start();
}

}

猜你喜欢

转载自www.cnblogs.com/Koma-vv/p/9634545.html