在程序开发中用到多线程,正统的方法是使用Runnable接口,相比继承Thread类,Runnable接口有以下两点好处:
1、避免单继承机制的局限,一个类可以实现多个接口
2、适用于资源的共享
下面以买票程序为例,分析继承Thread类和实现Runnable接口的不同;
1、继承Thread类
package org.mole.xc;
public class TicketThread extends Thread {
private String name;
public TicketThread(String name) {
this.name = name;
}
private int ticket = 5;
public void run(){
for(int i=0;i<10;i++){
if(this.ticket>0){
System.out.println(this.name+"买票ticket:"+this.ticket--);
}
}
}
}
package org.mole.xc;
public class TicketDemo1 {
public static void main(String args[]){
TicketThread ta = new TicketThread("线程1");
TicketThread tb = new TicketThread("线程2");
TicketThread tc = new TicketThread("线程3");
ta.start();
tb.start();
tc.start();
}
}
代码的执行结果如下:
只有5张票,三个线程各自买了5张,并未实现资源的共享,一共买了15张。
2、实现Runnable接口
package org.mole.xc;
public class TicketThread implements Runnable {
private String name;
public TicketThread(String name) {
this.name = name;
}
private int ticket = 5;
public void run(){
for(int i=0;i<10;i++){
if(this.ticket>0){
System.out.println(this.name+"买票ticket:"+this.ticket--);
}
}
}
}
package org.mole.xc;
public class TicketDemo1 {
public static void main(String args[]){
TicketThread ta = new TicketThread("线程1");
new Thread(ta).start();
new Thread(ta).start();
new Thread(ta).start();
}
}
代码执行后运行结果如下:
只有5张票,三个线程各自买了5张,并未实现资源的共享,一共买了5张。
Thread类和Runnable接口的关系如下:
文章思想来自魔乐科技。