Java的重要功能之一就是内部支持多线程,即一个程序可以并发地运行多个任务。之所以多线程是一个重要优点,是因为多线程可以使程序反应更快,交互性更强,执行效率更高。
Java对多线程程序创建和运行,以及锁定资源以避免冲突提供了非常好的支持。
创建任务和线程
Java创建线程的方法有两种:1)使用Thread类创建 2)通过实现Runnable接口开发任务类。
1)使用Thread类创建
Thread类包含为任务而创建的线程的构造方法,以及控制线程的方法。而现在主要对构造方法Thread()进行说明使用。Thread类实现了Runnable,因此可以定义一个Thread的拓展类,并实现run()方法;启动这个类的一个对象需要调用start()方法来启动线程。
public class UseThread {
public static void main(String[] args){
Thread thread =new Thread(){
//实现run()方法
@Override
public void run(){
System.out.println("Thread");
}
};
//调用strat方法启动线程
thread.start();
}
}
2)通过实现Runnable接口开发任务类
这种方法需要用Thread(Runnable task)方法来实现。task是一个实现Runnable接口,并覆盖run()方法的类。最后还是需要调用start()方法来启动程序。
//Task实现Runnable接口并覆盖了run()方法
class Task implements Runnable {
@Override
public void run() {
System.out.println("Task");
}
}
public class UseThread {
public static void main(String[] args) {
//使用Thread(Runnable task)构造方法
Thread task = new Thread(new Task());
//调用start()方法
task.start();
}
}
可以注意到两种方式都是调用Thread中的run()方法。但是更多的时候,通过实现Runnable接口开发任务类而实现多线程,主要是两者还是有一定的区别的:
1)由于Java中每个类只能继承一个父类,却可以实现多个接口。因此Thread类的继承有局限性,实现Runnable接口就没有这样的局限性。
2)资源共享的问题。实现Runnable接口开发任务,相当于多个线程一起完成一个任务,而继承Thread类来启动多线程,就相当于多个线程单独完成各自的任务。