目前为止,只知道两种线程创建的办法,一种是类继承,一种是接口的实现
就关于火车售票的问题来分析一下他们的区别
下面是通过接口的实现来创建线程的办法
package 两种创建线程的比较;
public class 两种创建线程的比较_Runnable {
public static void main(String[] args) {
TicketWindow2 th = new TicketWindow2();
new Thread(th,"窗口1").start(); //创建四个新线程
new Thread(th,"窗口2").start();
new Thread(th,"窗口3").start();
new Thread(th,"窗口4").start();
}
}
class TicketWindow2 implements Runnable{ //实现Runnable接口
private int tickets = 100;
public void run(){
while(true){
if(tickets > 0){
Thread th = Thread.currentThread(); //获取当前线程
String th_name= th.getName(); //获取线程名
System.out.println(th_name+"正在发售"+tickets--+"张票");
}
}
}
}
//这种实现Runnable接口的办法可以共享资源
下面是类继承的办法来实现创建线程的办法
package 两种创建线程的比较;
public class 两种创建线程的比较 {
public static void main(String[] args) {
new TicketWindow().start(); //创建一个TicketWindow对象并开启
new TicketWindow().start(); //创建一个TicketWindow对象并开启
new TicketWindow().start(); //创建一个TicketWindow对象并开启
new TicketWindow().start(); //创建一个TicketWindow对象并开启
}
}
class TicketWindow extends Thread{
private int tickets = 100;
public void run(){
while(true){
if(tickets > 0){
Thread th = Thread.currentThread(); //用Thread类的变量接收当前线程
String th_name=th.getName(); //用string类型的变量接受th线程的名字
System.out.println(th_name+"正在发售第"+tickets--+"张票");
}
}
}
}
运行程序后发现,通过类继承创建线程的办法是不能共享资源的,像上面的代码,是创建了四个线程,每个线程的tickets都是从100开始到0结束,所以每个窗口会打印100次
而通过接口来创建线程的办法则可以共享资源,这样四个窗口共打印了100次