多线程的实现
一.简介
java 可在单个程序中同时运行多个线程,并内置了对并发编程的支持。线程也称为轻量级进程,拥有自己的堆栈,寄存器和程序计数器,各个线程内运行的代码仅在该线程上下文中起作用。合理应用多线程,可以通过优化系统资源的使用来提高程序的性能和响应的速度。
二.多线程的实现
实现多线程的方式有两种,一种是创建Thread的子类并覆盖该run()方法。第二种方法是Runnable接口,下面分别介绍这两种方式的具体实现方法。
1.继承Thread类
创建Thread的子类并覆盖该run()方法,将需要在线程中执行的代码放在run()方法中,以下是创建Java Thread子类的示例:
public class MyThread extends Thread {
public void run(){
System.out.println("MyThread running");
}
}
线程的启动需要调用start方法,代码如下:
MyThread myThread = new MyThread();
myTread.start();
一旦调用start()启动线程,便会执行run()方法里的代码,且该线程与主线程(即main()函数的线程)并行执行,就好像由不同的CPU在执行,可将下面代码作为演示:
public class ThreadTest extends Thread{
@Override
public void run(){
for(int i = 0; i < 5; i++){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
System.out.println("myThread子线程:" + i);
}
}
public static void main(String[] args) {
ThreadTest myThread = new ThreadTest();
myThread.start();
for(int i = 0; i < 5; i++){
System.out.println("主线程:" + i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
}
}
在上面例子中,我们只运行了一个ThreadTest线程,也可以试试运行多个ThreadTest线程是什么效果。
2.实现Runnable接口
创建一个实现Runnable接口的类,并将该类的一个实例交给Thread去执行,代码如下:
public class MyRunnable implements Runnable {
public void run(){
System.out.println("MyRunnable running");
}
}
线程的调用和启动代码如下:
Thread thread = new Thread(new MyRunnable());
thread.start();
3.两种方式的选择
从上面我们可以看出,两种实现线程的方法都能达到同样的效果,那么,在我们实际工作中,选用哪一种方法更好呢?个人觉得,实现Runnable的方法更好,因为java不支持多重继承。如果某个类已经从某个超类继承,那么它将无法再继承Thread,而且java的Thread类本身就是Runnable接口的实现类。还有的情况需要一个Thread执行多个Runnable(比如线程池),这样就必须用实现Runnable接口的方式。