1.概念和示例代码
进程是内存中运行的一个应用程序,是操作系统分配资源的最小单位。
线程是进程中的一个执行流程,进程可以执行多个线程,线程总是属于某个进程,进程中的多个线程共享进程中的内存资源。
为了更有效的完成任务和利用CPU资源,需要多线程操作,因而需要多线程编程。Java多线程编程的时候,可以继承于Thread对象,也可以实现Runnable接口。
示例代码如下。
public class Main {
public static void main(String[] args) {
// 继承Thread对象 和 实现Runnable接口都可以实现线程编程
MyRunnable mr = new MyRunnable();
Thread t1 = new Thread(mr, "MyRunnable");
t1.start();
Thread t2 = new MyThread("MyThread");
t2.start();
}
}
/**
* 继承Thread对象的方式
*/
class MyThread extends Thread {
private String name;
public MyThread(String name) {
this.name = name;
}
@Override
public void run() {
// do somthing
System.out.println("我继承于Thread,\t" + name);
}
}
/**
* 实现Runnable接口的方式
*/
class MyRunnable implements Runnable {
public void run() {
// do somthing
System.out.println("我实现了Runnable,\t" + Thread.currentThread().getName());
}
}
2. Thread和Runnable的异同
相同点:从上面的例子看出,Thread和Runnable都可以实现多线程编程。
不同点:
1.Thread是对象,Runnable是接口。
2.由于java是单继承,所以当某个类必须要继承于其它类,就不能继承于Thread,只能通过实现Runnable接口。建议多使用Runnable接口,保持更好的扩展性。
3. 基于Runnable的代码可以被多个Thread实例共享,适用于多个线程处理同一个Runnable资源的情况。
4.创建Thread时候,编程不同,Runnable接口的方式多一句Thread t1 = new Thread(Runnable, threadName);