一.代码块同步
public class Main {
public static void main(String args[]) {
MyThread mt = new MyThread();
new Thread(mt,"票贩子A").start();
new Thread(mt,"票贩子B").start();
new Thread(mt,"票贩子C").start();
}
}
class MyThread implements Runnable{
private int ticket = 5;
@Override
public void run() {
for (int x = 0; x < 200; x++) {
synchronized (this) {
if (this.ticket > 0) {
if (this.ticket > 0) {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ",ticket:" + this.ticket--);
}
}
}
}
}
}
二.同步方法
public class Main {
public static void main(String args[]) {
MyThread mt = new MyThread();
new Thread(mt,"票贩子A").start();
new Thread(mt,"票贩子B").start();
new Thread(mt,"票贩子C").start();
}
}
class MyThread implements Runnable{
private int ticket = 60;
public synchronized void sale(){
if (this.ticket > 0) {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ",ticket:" + this.ticket--);
}
}
@Override
public void run() {
for (int x = 0; x < 200; x++) {
if (this.ticket > 0) {
this.sale();
}
}
}
}