在main函数中看到 Ticket t1=new Ticket();
Ticket t2=new Ticket();
Ticket t3=new Ticket();
Ticket t4=new Ticket();
说明创建了四个Ticket实例对象,每个实例对象都有全局变量ticket=100,而四个线程开启后又是独立的互不干扰,所以每个线程都会卖100张票出去
我们知道static类的变量是随类加载的,不与对象有关,只要类创建出来,里面就默认只有100张票,所以不管有几个实例对象,ticket被它们所共享。
要实现不加static关键字,而所有线程共享100张票,我们就要限定只有一个Ticket实例,可以实现Runnable接口,如下所示:- public class ThreadDemo {
- public static void main(String[] args) {
- Ticket ticket=new Ticket();
- new Thread(ticket).start();
- new Thread(ticket).start();
- new Thread(ticket).start();
- new Thread(ticket).start();
- }
- }
- class Ticket implements Runnable{
- private int ticket=100;
- public void run(){
- while(true){
- if(ticket>0){
- System.out.println(Thread.currentThread().getName()+":sales..."+ticket--);
- }
- }
- }
- }
复制代码 |