我想用四个不用的线程去卖共同100张票。
先看继承Thread类的代码:
class ThreadDemo1 {
public static void main(String[] args) {
TestThread tt = new TestThread();
tt.start();
tt.start();
tt.start();
tt.start();
}
}
class TestThread extends Thread {
int tickets = 100;
public void run() {
while (true) {
if (tickets > 0)
System.out.println(Thread.currentThread().getName()
+ " is saling ticket " + tickets--);
}
}
}
运行结果:
从运行结果可以看到只有一个线程在买票,因为只创建了一个TestThread对象。如果我们想创建四个不同的对象可以由如下代码:
class ThreadDemo1 {
public static void main(String[] args) {
new TestThread().start();
new TestThread().start();
new TestThread().start();
new TestThread().start();
}
}
class TestThread extends Thread {
int tickets = 100;
public void run() {
while (true) {
if (tickets > 0)
System.out.println(Thread.currentThread().getName()
+ " is saling ticket " + tickets--);
}
}
}
运行结果:
从运行结果可以看到这不是一个线程共同买100张票,而是每个线程买自己的100张票,要实现共同买100张票就要使用Runnable接口,看下面代码:
class ThreadDemo1 {
public static void main(String[] args) {
TestThread tt = new TestThread();
new Thread(tt).start();
new Thread(tt).start();
new Thread(tt).start();
new Thread(tt).start();
}
}
class TestThread implements Runnable {
int tickets = 100;
public void run() {
while (true) {
if (tickets > 0)
System.out.println(Thread.currentThread().getName()
+ " is saling ticket " + tickets--);
}
}
}
运行结果:
这样就实现了用四个线程共同买100张票。
通过这个例子我们可以了解到通过Runnable接口来创建多线程比Thread类的继承创建多线要灵活。几乎在所有多线程应用都用Runnable来实现。它适合多个相同程序代码的线程去处理同一资源的情况,把虚拟CPU(线程)同程序的代码、数据有效分离,较好地体现了面向对象的设计思想。