我们都知道多线程可以并发执行任务,在某些情况下多线程或许不能提高执行效率,因为多线程虽然看上去是并发执行的,实际上还是CPU分配时间片,是有先后顺序的,只是时间片切换速度很快,以至于我们看上去是同时执行的而已!但是对于那种需要等待请求响应耗时比较长的任务用多线程的话相较于单线程效率要高的多,如API请求,网络爬虫等等。
那么如何创建一个线程呢?创建线程有两种方法,第一种就是继承Thread类,第二种实现Runnable接口。如下展示:
1.继承Thread类:
package 多线程学习;
/**
- Created by Administrator on 2018/9/24.
*/
public class MyThread extends Thread{
@Override
public void run(){
try{
System.out.println(“创建了一个线程叫:”+Thread.currentThread().getName());
}catch (Exception e){
e.printStackTrace();
}
}
}
创建Test类:
package 多线程学习;
/**
- Created by Administrator on 2018/9/25.
*/
public class Test {
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.setName(“thread0”);
myThread.start();
}
}
运行这个main方法:打印结果如下:
创建了一个线程叫:thread0
Process finished with exit code 0
2.实现Runnable接口:
package 多线程学习;
/**
- Created by Administrator on 2018/9/24.
*/
public class MyRunnable implements Runnable{
@Override
public void run(){
try{
System.out.println(“创建了一个线程叫:”+Thread.currentThread().getName());
}catch (Exception e){
e.printStackTrace();
}
}
}
创建Test类:
package 多线程学习;
/**
- Created by Administrator on 2018/9/25.
*/
public class Test {
public static void main(String[] args) {
Runnable runnable = new MyRunnable();
Thread thread = new Thread(runnable);
thread.setName(“thread0”);
thread.start();
}
}
运行这个main方法:打印结果如下:
创建了一个线程叫:thread0
Process finished with exit code 0
总结:我们可以看到这两种创建线程的方法都可以,但是由于java语言的特性是单根继承的,而接口是可以实现多个的,所以我们平时最好还是用第二种实现Runnable接口的方法来创建一个线程。但其实我们看Thread类的源码就知道它也是实现Runnable的接口的:
public
class Thread implements Runnable {
}