1. 多线程详解
1.1 概述
多线程就是同一个种任务多个终端运行,互相不打扰但也可以互相通信,线程拥有完整的生命周期,从出生到运行到死亡。
需要区分三个概念,线程,进程,多线程。
在一般的程序中一般都是主线程单方向的向下运行,调用方法时也是运行中断,但始终都是一条下往下走,这就是单线程。
进程就是系统开辟的一些空间,里面包含了至少一条线程,一个执行过程,一个动态的概念,而线程是CPU执行的调度的单位。
在一个进程内的很多条线程同步运行既是多线程。
有几个核心概念:
- 线程就是独立的执行路径。
- 线程是由CPU调度的,调度的过程不能认为干扰,其与操作系统紧密相关。
- 对同一份资源进行操作时,一般需要添加并发控制,防止资源抢夺问题。
- 线程会带来额外的开销成本,如时间和并发控制开销。
- 每个线程在自己的工作内存交互,内存控制不当会造成数据不一致。
1.2 线程的创建
线程继承的方法一般有三种:
- 继承Thread类。
- 实现Runnable接口。
- 实现Callable接口。
首先是Thread类,第一步就是自定义线程类来继承Thread类,也就是随别定义一个类继承Thread
然后重写run()方法,编写线程的执行体,最后是创建线程对象,然后调用start()方法即可启动线程。
package com.cabin.test06;
public class Thread1 extends Thread{
@Override
public void run() {
for (int i = 0; i <20 ; i++) {
System.out.println("wait" + i);
}
}
public static void main(String[] args) {
Thread1 thread = new Thread1();
thread.start();
for (int i = 0; i < 20; i++) {
System.out.println("run " + i);
}
}
}
以上是继承Thread类创建线程的方法,运行后会发现线程和主线程的运行是同时运行的,结果交替出现:
顺序是随机的,每一次运行的结果都会不一样,这个和CPU的运行情况有关。
注意几点:
- 线程开启以后不一定马上执行,随CPU而定。
- 调用的是start()方法才能开启线程,而不是run方法。