携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第15天,点击查看活动详情
今天来学习一下Java中一个比较重要的模块,多线程。多线程在java开发尤其是并发编程这里的重要性不言而喻,需要我们好好研究。
进程
进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。
程序运行时系统就会创建一个进程,并为它分配资源,然后把该进程放入进程就绪队列,进程调度器选中它的时候就会为它分配CPU时间,程序开始真正运行。
线程
线程是程序执行时的最小单位,它是进程的一个执行流,是CPU调度和分派的基本单位。 一个进程可以由很多个线程组成,线程间共享进程的所有资源,每个线程有自己的堆栈和局部变量。 线程由CPU独立调度执行,在多CPU环境下就允许多个线程同时运行。同样多线程也可以实现并发操作,每个请求分配一个线程来处理。
每一个应用程序都是一个进程,每个进程中包含多个线程。
实现线程的三种方式
继承Thread类
实现Runabled
ExecutorService
Callable Future 带返回值的多线程操作
多线程的生命周期
创建 就绪 运行 阻塞 终止
控制线程执行顺序
这里我们来了解一下控制线程执行顺序,定义三个线程进行执行,这个时候正常执行多个线程的话,每个线程的执行顺序都是随机的。
static Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("线程1");
}
});
static Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("线程2");
}
});
static Thread thread3 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("线程3");
}
});
join()
join()java中经常会用到的一个控制线程的方法,它主要是将当前线程置为WAITTING状态,然后等待调用的线程执行完毕或被interrupted。
这里我们来使用一个 join() 方法来控制线程执行顺序:
thread1.start();
thread1.join();
thread2.start();
thread2.join();
thread3.start();
thread3.join();