方式一:继承Thread
public class ThreadDemo extends Thread {
public static Object obj=new Object();
[b] //这里定义的对象必须是静态的,因为我们定义的锁只有一个,那么这个obj必须是ThreadDemo
//对象都共用的
public int num=100;
public void run(){
while(true){
synchronized(obj){
//定义一个锁,在同一个时刻,只能让同一个线程进来
if(num>0){
try {
Thread.sleep(300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(getName()+"正在卖票"+num--);
}
}
}
}
方式二:实现Runnable接口
public class ThreadDemo implements Runnable {
Object obj=new Object();
//由于ThreadDemo继承了Runnable,我们在main方法中调用的时候只需要建立一个ThreadDemo对象
//所以这次不需要再设置成static
int num=100;
public void run() {
while(true){
synchronized(obj){
//和继承Thread一样,定义一个锁,在同一个时刻,只能让同一个线程进来
if(num>0){
try {
Thread.sleep(300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"正在卖票"+num--);
}
}
}
注明:由于代码有点长,在这里main方法中的调用就不写了,只需要记住第一个建立三个ThreadDemo对象,第二个建立一个ThreadDemo对象,然后直接通过start()方法启动线程就可以了
}
|
|