Java的多线程实现,有一下两种方式:
·继承Thread类
·实现Runnable接口
注意
1直接调用run()是没有创建新线程的(相当于只是调用了一个普通方法)
2new Thread();只是创建了线程对象要启动线程需要调用start().
3如果当前线程已经启动了(就是说已经调用了start方法),再次调用start方法就会出现java.lang.IllegalThreadStateException异常
4Runnable接口中是没有start(),所以要实例化Thread类,调用其start方法。
Runnable接口与Thread类的区别
1接口可以多继承,类只能单继承
2使用Thread类在操作多线程的时候无法达到资源共享的目的,而使用Runnable接口实现的多线程操作可以实现资源共享
Runnable接口
class MyThread implements Runnable //继承自Thread类
{
private int Number1 = 5; //票的总数
public void run() { //覆写run方法,作为线程的主体
for (int i = 0; i < 100; i++) {
if (Number1 > 0)
System.out.println("ticket" + Number1--);
}
}
}
public class Test {
public static void main(String args[]) {
MyThread m = new MyThread();
new Thread(m).start();//票的总数是共享的,票的总数是5。
new Thread(m).start();
}
}
继承自Thread类
class MyThread extends Thread //继承自Thread类
{
private int Number1 = 5; //票的总数
public void run() { //覆写run方法,作为线程的主体
for (int i = 0; i < 100; i++) {
if (Number1 > 0)
System.out.println("ticket" + Number1--);
}
}
}
public class Test {
public static void main(String args[]) {
MyThread m1 = new MyThread();
MyThread m2 = new MyThread();
MyThread m3 = new MyThread();
m1.start(); //启动线程,每个线程单独的票
m2.start(); //启动线程
m3.start(); //启动线程
}
}
你会发现Runablex实现的线程,所有的线程总共卖了5张票
而Thread实现的线程,每个线程卖了5张。