一、多线程是什么?
多线程就是指一个进程内有多个线程。进程是只一个运行中的程序,线程则是只进程中一个独立的执行单位。进程至少有一个线程。
例如:一台电脑同时运行了多个软件,这是多个进程。以电脑管家为例,它可以在查杀病毒的同时清理垃圾,这就是一个进程内有多个线程。
二、多线程的创建
多线程的创建有两种方式。一种是实现Runnable接口,另一种是继承Thread类。
1.实现Runnable接口
步骤:
- 创建一个线程类实现Runnable接口,并实现run()方法。run()方法就是该线程的任务。
- 通过Thread对象,调用start对象,开启线程。
代码如下:
public class MyThread implements Runnable{
String threadName;
public MyThread(String threadName){
this.threadName=threadName;
}
@Overrride
public void run(){
for(int i=1;i<=5;i++){
System.out.println(threadName+"第"+i+"次执行。")
}
}
}
public class ThreadDemo{
public static void main(String[] args){
Mythread myThread01=new MyThread("线程1");
Mythread myThread02=new Mythread("线程2");
Thread thread01=new Thread(myThread01);
Thread thread02=new Thread(myThread02);
thread01.start();
thread02.start();
}
}
执行结果:
***注意:***线程需要通过start方法开启,如果直接调用run()方法,实际上就只是在main方法中调用run方法罢了,并没有开启多线程。
例如:我将start方法改为执行run方法。
public class ThreadDemo{
public static void main(String[] args){
//实现Runnable接口
MyThread myThread01=new MyThread("线程1");
MyThread myThread02=new MyThread("线程2");
Thread thread01=new Thread(myThread01);
Thread thread02=new Thread(myThread02);
thread01.run(); //不执行start()
thread02.run();
}
}
结果如下:
2.继承Thread类
步骤:
- 创建一个线程类继承Runnable接口,并重写run()方法。
- 创建线程对象,并调用start()开启线程。
代码如下:
public class MyThread01 extends Thread{
String threadName;
public MyThread(String threadName){
this.threadName=threadName;
}
@Override
public void run(){
for(int i=1;i<=5;i++){
System.out.println(threadName+"第"+i+"次执行。");
}
}
}
public Class ThreadDemo{
public static void main(String[] args){
MyThread01 thread01=new MyThread01("线程1 ");
MyThread01 thread02=new MyThread01("线程2 ");
thread01.start();
thread02.start();
}
}
结果如下:
3.两种线程创建方式的联系与区别。
联系:
首先打开Thread类,会发现Thread类也实现T了Runnable接口。
用户不论如何都要重写run()方法。
区别:
继承Runnable接口更常用,可以避免单继承的限制,也更适合资源共享。