最直观的就是对于共享数据资源操作class Ticket implements Runnable//extends Thread
{
private int tick = 100;
public void run()
{
while(true)
{
if(tick>0)
System.out.println(Thread.currentThread().getName()+"sale:"+tick--);
}
}
}
class TicketDemo
{
public static void main(String[] args)
{
Ticket t = new Ticket();//非创建线程。需要Thread或Thread子类对象。
Thread t1 = new Thread(t);//创建方法1卖了400张票,建立了4个对象,每个对象的特有属性tick都等于100
Thread t2 = new Thread(t);//而方法2中,只建立了一个对象,仅有100张票。
Thread t3 = new Thread(t);
Thread t4 = new Thread(t);
t1.start();
t2.start();
t3.start();
t4.start();
}
}
此例中如果使用Thread子类创建线程的话,创建了4个对象。会发现在4个窗口售出了400张票,与实际要求不符合。
应用实现接口Runnable子类对象的优点在于,只创建了一个其子类对象,并作为参数传递Thread。多线程仅仅是对这一个对象操作。
不会出现多对象的问题。 |