多线程(一)线程的介绍与创建

点点圈 提交于 2019-12-02 11:08:38

一、线程与进程的区别

1.进程:是程序的一次执行过程,或是正在运行的一个程序 。由程序、数据和进程控制块三部分组成。比如 运行中的IDEA,vscode
2.线程:是进程中实际运作的单位,是一个程序内部的一条执行路径。

总结:一个操作系统可以同时执行多个任务,每个任务就是一个进程;一个进程可以执行多个任务,每个任务就是线程。

3.两者之间的关系:一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程,即主线程。多个线程共享进程的全部系统资源,同时线程还拥有自己独立的程序计数器、虚拟机栈、本地方法栈。

二、使用多线程的好处

1.进程之间不能共享内存;线程之间相互独立,且共享进程中的资源,提高计算机CPU的利用率。
2.多线程技术使程序的响应速度更快,增强用户的体验。

三、线程的创建和启动

1.继承Thread类

  • 定义一个继承Thread类的子类;
  • 重写该类的run()方法,将线程执行的操作声明在run()方法里面;
  • 创建Thread类子类的对象;
  • 调用线程对象的start()方法来启动线程。
// 1.创建一个继承于Thread类的子类
class MyThread extends Thread {
    // 2.重写Thread类的run方法
    @Override
    public void run() {
        for (int i = 0; i <= 100; i++) {
            if (i % 2 == 0) {
                System.out.println(Thread.currentThread().getName()+": "+i);
            }
        }
    }
}

public class ThreadTest {
    public static void main(String[] args) {
        // 3.创建Thread类子类的对象
        MyThread t1 = new MyThread();
        // 4.通过此对象调用start
        t1.setName("线程A");
        t1.start();

        MyThread t2 = new MyThread();
        t2.setName("线程B");
        t2.start();
    }
}

2.实现Runnable接口创建线程

  • 定义一个实现了Runnable接口的类;
  • 重写run()方法,将线程执行的操作声明在run()方法里面;
  • 创建实现类的对象;
  • 将此对象传递到Thread类的构造器中创建Thread对象;
  • 调用线程对象的start()方法启动该线程。
// 1.创建一个实现Runnable接口的类
class MyThread implements Runnable {
    // 2.实现类去实现Runnable中的抽象方法run()
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            if (i % 2 == 0) {
                System.out.println(Thread.currentThread().getName()+":"+i);
            }
        }
    }
}
public class ThreadTest2 {
    public static void main(String[] args) {
        // 3.创建实现类的对象
        MyThread m = new MyThread();
        // 4.创建Thread类的对象
        Thread t1 = new Thread(m);
        t1.setName("线程A");
        // 5.启动线程
        t1.start();
       
        Thread t2  = new Thread(m);
        t2.setName("线程B");
        t2.start();
    }
}

两种方式的比较:
两种方式都需要重写run(),将线程要执行的操作声明在run()中。
第一种方式是继承Thread类,因Java是单继承,如果一个类继承了Thread类,那么就没办法继承其它的类了。
第二种 实现的方式没有类的单继承性的局限性,实现的方式更适合来处理多个线程有共享数据的情况。所以实际开发就使用第二种方式。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!