多线程编程是java语言中最为重要的特性之一,利用多线程技术可以提升代码效率,也是现代程序开发中高并发的主要设计形式
进程是程序的一次动态执行过程,它经历了从代码加载,执行到执行完毕的一次完整过程,这个过程也是从进程本身从产生到最终消亡的过程
虽然多进程可以提高硬件资源的利用率,但是进程的启动与销毁依然需要消耗大量的系统性能,导致程序的执行性能下降,所以为了进一步提升并发操作的处理能力,在进程的基础上又划分出了多线程的概念,这些线程依附于指定的进程,并且可以快速启动以及并发执行,并且可以快速启动,以及并发执行
在JAVA如果想实现多线程,那么就必须依靠一个线程的主体类(就好比主类的概念一样,表示的是一个线程的主类,)但是这个线程的主体类在定义的时候也需要一些特殊的要求,这个类可以继承Thread类,实现Runnable接口来完成定义
public class Demo3 {
public static void main(String[] args) {
// Test1 test1 = new Test1(); // new 一个对象
// test1.start(); // 在调用.start方法的时候默认调用run方法 所以run方法就会执行
// int a = 1 / 0;
//
Runnable test2 = new Test2(); // new一个Test2的子类对象,他的目的是创建任务
Thread thread = new Thread(test2); // mew一个Thread对象,他默认是个空线程, 需要有任务才可以开启线程执行.
Thread t2 = new Thread(test2); //创建第二个对象实现同一个任务多线程执行
thread.start();// 验证是否独立线程执行不受异常影响,结果就是该抛抛异常抛异常,但是这个线程是独立运行的
t2.start(); //第二条线程正常执行
}
}
class Test1 extends Thread { // 该类继承Thread类
@Override
public void run() { // 重写run方法
System.out.println("线程一");
}
}
class Test2 implements Runnable {
@Override
public void run() {
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("线程运行");
}
}
}
由于多线程需要并发执行,所以需要通过操作系统的资源调度才可以执行,这样对于多线程的启动就必须利用Thread类中的statr的方法,调用此方法会间接调用run方法
多个线程彼此交替执行的话,每次执行的结果肯定是不一样的,要想启动线程必须依靠Thread类的start方法执行,线程启动后会默认调用run方法.