花了一天的时间才搞懂的操作,以前觉得自己懂了,但是实践起来却又是另外一回事。总之受益良多。
不能在对象里sleep,对象里写while就是一次性的。
原子锁是线程的东西,也不要放在对象方法中
run方法就是写逻辑的
单一原则
public class Train {
private static int count; //总票数
public Train() {
}
public Train(int count) {
this.count = count;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
//销售方法
public boolean sale() {
if (count>0) {
System.out.println(Thread.currentThread().getName()+"正在出售一张票,还剩"+count--+"张");
return true;
}else {
return false;
}
}
}
public class Test {
public static void main(String[] args) {
Train train = new Train(10);
Thread1 t1 = new Thread1(train);
Thread1 t2 = new Thread1(train);
t1.setName("t1");
t2.setName("t2");
t1.start();
t2.start();
}
}
class Thread1 extends Thread {
private Train train;
public Thread1(Train train) {
this.train = train;
}
@Override
public void run() {
while (train.sale()) {
synchronized (train) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}