1、Thread类实现了Runnable接口
继承Thread类时,重写Thread中的run()即可实现多线程
实现Runnable接口时,必须实现run()方法来实现多线程
public class Thread extends Object implements Runnable
2、继承Thread类存在点继承的局限,实现Runnable接口可以继续实现多个接口
Runnable适用于资源的共享
简单操作代码(售票)
Thread
public class MyThread extends Thread{
int ticket = 20;
public synchronized void run() {
for(int i=0;i<50;i++){
if(ticket>0){
System.out.println("剩余ticket="+ticket--);
}
}
}
public static void main(String[] args){
/*MyThread mt = new MyThread();
mt.start();
mt.start();
mt.start();*///同一个Thread类不能重复调用start(),运行报错java.lang.IllegalThreadStateException
MyThread mt1=new MyThread();
MyThread mt2=new MyThread();
MyThread mt3=new MyThread();
mt1.start();//每个线程都各卖了20张,共卖了60张票
mt2.start();//但实际只有20张票,每个线程都卖自己的票
mt3.start();//没有达到资源共享
}
}
Runnable
public class MyThread implements Runnable{
int ticket = 20;
public synchronized void run() {
for(int i=0;i<50;i++){
if(ticket>0){
System.out.println("剩余ticket="+ticket--);
}
}
}
public static void main(String[] args){
MyThread mt = new MyThread();
new Thread(mt).start();//Runnable中不存在start()方法,
new Thread(mt).start();//通过Thread类启动Runnable实现多线程
new Thread(mt).start();
}
}