1.线程概念
2.线程状态及转换
3.Java中的线程实现
在Java的世界中,完成一个有关线程的编码,最基础的有两种方式:①extends java.lang.Thread(继承类);②implements java.lang.Runnable(实现接口)
那么此时,问题来了:上述两种方式,各有什么优缺点或者说有什么不同?
- Java是一种单继承、多实现的编程语言。由于这个特点,在使用继承的方式实现多线程的方式就会出现局限性:倘若这个类还需要继承其他类怎么办?
- 实现接口的方式会强制性的需要 重写 Runnable所定义的run()方法,而继承类方式则不强制。这种说法的确正确,但我感觉这个不同之处并没有什么实际存在的意义,毕竟我开启一个线程,总是想做一点业务处理,所以总会在run()中写一些其他的东西。
4.Java中线程有关的方法
- run():这个方法中的内容决定了这个线程具体是干什么的;
- start():这个方法会启动当前线程;
5.示例代码
/** 分别采用继承Thread类和实现Runnable接口来实现多线程
* 主线程,程序启动入口
**/
public class MyThread{
public static final main(String args[]){
MyThread1 mt1 = new MyThread1();
MyThread2 mt2 = new MyThread2();
mt1.start();
new Thread(mt2).start();
}
}
//线程一(通过继承类),作用是循环输出数字
class MyThread1 extends Thread{
public void run() {
super.run();
for(int i=0;i<20;i++){
System.out.println("MyThread1:"+i);
}
}
}
//线程二(通过实现接口),作用同样是循环输出数字
class MyThread2 implements Runnable{
@Override
public void run() {
for(int i=0;i<20;i++){
System.out.println("MyThread2:"+i);
}
}
}
上面这段代码输出的结果会是MyThread1和MyThread2不规律的出现。
小小总结一下,上面的示例代码中采用的是继承Thread类来实现的线程,其中的run()方法中为具体的任务,使用start()方法来使这个线程处于就绪状态,等待CPU的调度。