一、Thread实现
public class ThreadDemo4 {
publicstaticvoid main(String[] args) {
new ThreadTest4().start();
new ThreadTest4().start();
new ThreadTest4().start();
}
}
class ThreadTest4 extends Thread {
privateinttickets = 100;
publicvoid run() {
booleanloop = true;
while(loop) {
if(tickets > 0) {
System.out.println(Thread.currentThread().getName() + " is sailing ticket " + tickets--);
} else {
loop = false;
}
}
}
}
运行结果:
分析:
从运行结果可以看出,最终打印出了3份数据。说明每个线程独立地拥有一份数据,用Thread实现的多线程之间无法共享数据。
二、Runnable实现
public class ThreadDemo5 {
publicstaticvoid main(String[] args) {
ThreadTest5 t = new ThreadTest5();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
}
}
class ThreadTest5 implements Runnable {
privateinttickets = 100;
publicvoid run() {
booleanloop = true;
while(loop) {
if(tickets > 0) {
System.out.println(Thread.currentThread().getName() + " is sailing ticket " + tickets--);
} else {
loop = false;
}
}
}
}
运行结果:
分析:
从运行结果可以看出,最终打印出来的只有一份数据。说明用Runnable实现的多个线程之间共享一份数据。
结论:
两种方法实现多线程的最重要区别是:Runnable实现的多线程共享数据,Thread实现的多线程,每个线程拥有独立的数据。所以在实际项目中,通常用Runnable方式来实现多线程。