public class ThreadDemo {
public static void main(String[] args) {
MyThread thread1=new MyThread();
new Thread(thread1).start();
new Thread(thread1).start();
new Thread(thread1).start();
new Thread(thread1).start();
}
}
class MyThread implements Runnable{
private int ticket=5;
public MyThread(){
}
public void run(){
for(int i=0;i<100;i++){
synchronized (this) {
if(ticket>0){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("卖出了第"+ticket--+"张票");
}
}
}
}
}
②使用同步方法
public class ThreadDemo {
public static void main(String[] args) {
MyThread thread1=new MyThread();
new Thread(thread1).start();
new Thread(thread1).start();
new Thread(thread1).start();
new Thread(thread1).start();
}
}
class MyThread implements Runnable{
private int ticket=5;
public void run(){
for(int i=0;i<100;i++){
this.sale();
}
}
public synchronized void sale(){
if(ticket>0){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("卖出了第"+ticket--+"张票");
}
}
}
8、wait 和 sleep 比较
①wait别的线程可以访问锁定对象,它是Object类的方法,注意:调用wait方法的时候必须锁定该对象
②sleep时别的线程不可以访问锁定对象,它是Thread类的方法