什么是进程、线程和多线程?
进程是指运行中的程序,它负责了程序运行时候内存的分配。
线程是一个程序代码的执行路径,它负责了任务代码的执行。例如:360安全卫士。
为什么360安全卫士可以同时进行电脑体检、木马查杀、垃圾清理等工作呢?
当运行360安全卫士的时候,如果我们点击垃圾清理,那么360安全卫士就会启用一个线程来执行垃圾清理的代码。如果点击了木马查杀,那么360就会启用一个线程来执行木马查杀的代码。如果点击了电脑体检,那么360就会启用一个线程来执行电脑体检的代码。这个就是多线程。所谓多线程,就是在同一个时间内有多个线程同时执行多个任务。之所以360安全卫士能够同时执行多个任务的原因,就是使用了多线程来实现的。
使用多线程的好处:
1)使得进程在同一个时间片内能够执行多个任务;
2)提高CPU的利用率;
但是,多线程并不是只有优点,它也有缺点:
1)降低线程的执行概率;
2)增加CPU的负担;
3)有可能会出现安全问题;
4)有可能会出现死锁问题;
所以,在实际开发中,如果需要执行一些比较耗时的任务的时候,才会考虑使用多线程。
如何定义线程?
第一步:定义一个类,继承Thread。
第二步:重写Thread类的run方法,在该方法中实现任务代码。
第三步:启动线程。
class FirstThread extends Thread {
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println("自定义线程:" + i);
}
}
}
public class Demo1 {
public static void main(String[] args) {
FirstThread firstThread = new FirstThread();
firstThread.start(); //启动线程
}
}
注意:1)启动线程不要直接调用run方法,而是要通过Thread对象提供的start方法启动线程。2)在JVM中只有包含两条线程,一条是主线程,负责执行main方法的线程;另外一条是垃圾回收线程,负责回收系统资源的线程。
线程生命周期状态:
线程创建开始,到线程的消亡为止,一共经历了五个不同的状态:就绪状态、可运行状态、运行状态、阻塞状态、死亡状态。它们之间的转换如下图所示:
就绪状态:创建线程对象时候的状态;
可运行状态:调用线程的start方法时候的状态;
运行状态:当线程抢夺到了CPU执行权时候的状态;
阻塞状态:当线程调用了sleep(睡眠)、wait(等待)方法时候的状态。阻塞状态下的线程超过了睡眠时间或被其他线程唤醒,那么该线程就会重新进入可运行状态;
死亡状态:当线程的任务执行完毕的状态;