方式二:同步方法
- 将操作共享数据的方法声明为synchronized.即此方法为同步方法能够保证当其中一个
- 线程执行此方法时,其他线程在外等待直至此线程执行完毕此方法
- 同步方法的锁:this
public class Test {
public static void main(String[] args) {
Window2 w = new Window2();
Thread t1 = new Thread(w);
Thread t2 = new Thread(w);
Thread t3 = new Thread(w);
t1.setName("一号窗口");
t2.setName("二号窗口");
t3.setName("三号窗口");
t1.start();
t2.start();
t3.start();
}
}
class Window2 implements Runnable{
int ticket = 100;
public synchronized void show() {
if(ticket > 0) {
try {
Thread.currentThread().sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "售票:票号为:"+ ticket--);
}
}
public void run() {
while(true) {
show();
}
// while(true) {
// synchronized(obj) {
// if(ticket > 0) {
//
//
//
// try {
// Thread.currentThread().sleep(10);
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// System.out.println(Thread.currentThread().getName() + "售票:票号为:"+ ticket--);
//
// }
// }
}
}