多线程
进程:是一个正在执行中的程序,每一个进程执行都有一个执行程序。该顺序是一个执行路径,或者叫一个控制单元
线程:就是进程中的一个独立的控制单元,线程在控制进程的执行,一个进程至少一个线程
Java VM 启动的时候会有一个进程java.exe,该进程至少有一个线程负责Java程序的执行。而且这个线程运行的代码存在于main方法中,该线程称之为主线程
扩展:其实更细节说明jvm启动不止一个线程,还有负责垃圾回收机制的线程
创建线程:
第一种方式:继承Thread类
步骤:
1、定义类继承Thread
2、复写Thread类中的run方法
3、调用线程的start方法,该方法有两个作用:启动线程,调用run方法
class ThreadTest extends Thread {
public void run() {
for (int x = 0; x < 50; x++) {
System.out.println("test......" + (x + 1));
}
}
}
public class ThreadDemo {
public static void main(String[] args) {
ThreadTest threadTest = new ThreadTest();
threadTest.start();
for (int i = 0; i < 50; i++) {
System.out.println("Demo>>>>" + (i + 1));
}
}
}
第二种方式:实现Runnable接口
步骤:
1、定义类实现Runnable接口
2、覆盖Runnable接口中的run方法
3、通过Thread类建立线程对象
4、将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数
5、调用Thread类中的start方法开启线程并调用Runnable接口子类的run方法
class ThreadTest1 implements Runnable {
public void run() {
for (int i = 0; i < 50; i++) {
System.out.println("test...." + (i + 1));
}
}
}
public class ThreadDemo1 {
public static void main(String[] args) {
ThreadTest1 threadTest = new ThreadTest1();
Thread thread = new Thread(threadTest);
thread.start();
for (int i = 0; i < 50; i++) {
System.out.println("Demo>>>>>>" + (i + 1));
}
}
}
实现方式和继承方式的区别
实现方式避免了单继承的局限性,在定义线程时,建议使用实现方式
继承Thread:线程代码存放Thread子类的run方法中
实现Runnable:线程代码存放在接口的子类的run方法中