卖出的票为负数的情况:
class MyThread22 implements Runnable {
private int ticket = 10;
public void run() {
for (int i = 0; i < 100; i++) {
if (ticket > 0) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Saling: ticket= " + ticket--);
}
}
}
}
public class SyncDemo01 {
public static void main(String[] args) {
MyThread22 mt = new MyThread22();
Thread t1 = new Thread(mt);
Thread t2 = new Thread(mt);
Thread t3 = new Thread(mt);
t1.start();
t2.start();
t3.start();
}
}
使用同步方法解决此问题:
class MyThread30 implements Runnable {
private int ticket = 20;
public void run() {
for (int i = 0; i < 100; i++) {
this.sale();
}
}
public synchronized void sale() {
if (ticket > 0) {
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("saling: ticket=" + ticket--);
}
}
}
public class SyncDemo03 {
public static void main(String[] args) {
MyThread30 mt = new MyThread30();
Thread t1 = new Thread(mt);
Thread t2 = new Thread(mt);
Thread t3 = new Thread(mt);
t1.start();
t2.start();
t3.start();
}
}
线程的资源同步问题