Java中有一个多线程的概念一直无法理解,最近找到一个比喻 :
客人来了要沏茶给他喝,这时候你可以采用以下两种方法:
单线程:
多线程:
由此可见,多线可以提高程序运行效率,尤其是程序块比较多时.
在Java中实现多线程有2种手段,一种是继承Thread类,另一种是实现Runnable接口.
继承Thread类:
class MyThread extends Thread{ // 继承Thread类,作为线程的实现类
private String name ; // 表示线程的名称
public MyThread(String name){
this.name = name ; // 通过构造方法配置name属性
}
public void run(){ // 覆写run()方法,作为线程的操作主体
for(int i=0;i<10;i++){
System.out.println(name + "运行,i = " + i) ;
}
}
};
public class ThreadDemo{
public static void main(String args[]){
MyThread mt1 = new MyThread("线程A ") ; // 实例化对象
MyThread mt2 = new MyThread("线程B ") ; // 实例化对象
mt1.start() ; // 启动多线程
mt2.start() ; // 启动多线程--[注意]不能用mt2.run(),这样只是调用线程主体,并没有启动线程
}
};
实现Runnable接口:
class MyThread implements Runnable{ // 实现Runnable接口,作为线程的实现类
private String name ; // 表示线程的名称
public MyThread(String name){
this.name = name ; // 通过构造方法配置name属性
}
public void run(){ // 覆写run()方法,作为线程 的操作主体
for(int i=0;i<10;i++){
System.out.println(name + "运行,i = " + i) ;
}
}
};
public class RunnableDemo{
public static void main(String args[]){
MyThread mt1 = new MyThread("线程A ") ; // 实例化对象
MyThread mt2 = new MyThread("线程B ") ; // 实例化对象
Thread t1 = new Thread(mt1) ; // 实例化Thread类对象
Thread t2 = new Thread(mt2) ; // 实例化Thread类对象
t1.start() ; // 启动多线程
t2.start() ; // 启动多线程
}
};
实现Runnable接口比继承Thread有以下优势:
避免单继承
代码能被多线程共享