package com.yanan.java1;
/**
* Created by zhangyanana on 2017/3/1.
*/
//方式二 : 同步方法
/* 1、对于非静态类:
即此方法为同步方法将操作共享数据的方法生命为synchronized.即此方法为同步方法,
能够保证当其中一个线程执行此方法时,其他线程在外等待直至执行完此方法
同步方法的锁:this(当前对象),如果用继承Thread的方式,慎用同步方法。
2、对于静态类:如果使用同步,默认的锁为:当前类本身。以单例懒汉式为例。Class class=Singleton.class;
*/
class Window4 implements Runnable {
//共享数据ticket 和 obj对象
int ticket = 100;
Object obj = new Object();
public void run() {
while (true) {
show();
}
}
//把方法声明为同步的
public synchronized void show() {
if (ticket > 0) {
try {
Thread.currentThread().sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ":" + ticket--);
}
}
}
public class TestWindow4 {
public static void main(String[] args) {
Window4 w = new Window4();
//各个线程共享同一个对象w1
Thread t1 = new Thread(w);
Thread t2 = new Thread(w);
Thread t3 = new Thread(w);
t1.start();
t2.start();
t3.start();
}
}