class Ticket implements Runnable {
int num = 200;
boolean flag = true;
public void run() {
if (flag) {
while (true) {
synchronized (this) { //这里要和show方法同步的锁(对象)保持一致,实现同一共享数据。
if (num > 0) {
System.out.println(Thread.currentThread().getName() + "----" + num--);
}
}
}
} else {
while (true) {
show();
}
}
}
public synchronized void show() {
if (num > 0) {
System.out.println(Thread.currentThread().getName() + "---.............." + num--);
}
}
}
class Demo1 {
public static void main(String[] args) {
Ticket t = new Ticket();
Thread tt = new Thread(t);
Thread ttt = new Thread(t);
tt.start();
t.flag = false;
ttt.start();
}
}
我们这里将另一个线程在show方法中执行,当方法里的所有代码都需要同步时,可以在方法中直接加synchronized。
非静态的方法在执行的时候需要被对象调用。所以它用的对象就是this,this代表当前对象。
静态的方法在执行时用当前class文件代表对象。