一、进程和线程的概念
进程:CPU资源管理的基本单位。任务管理器中的每一个exe都是一个进程。JVM也是一个进程。
线程:CPU执行和调度的基本单位。
一个进程可以有多个线程,多个线程可以共享进程中相同的内存或文件资源。
二、多线程使用场景
(1)阻塞。一旦系统中出现了阻塞现象,则可以根据实际情况来使用多线程技术提高运行效率。
(2)依赖。业务分为两个执行过程,分别是A和B。当A业务发生阻塞情况时,B业务的执行不依赖A业务的执行结果,这时可以使用多线程技术来提高运行效率;如果B业务的执行依赖A业务的执行结果,则可以不使用多线程技术,按顺序进行业务的执行。
ps:多线程是异步的,所以千万不要把Java代码的顺序当作线程执行的顺序,线程被调用的时机是随机的。
三、多线程的实现
实现多线程编程主要有两种方式:一种是继承Thread类,另一种是实现Runnable接口。
1. 先来看第一种继承Thread类的写法:
public MyThread extends Thread{
@Override
public void run(){
super.run();
System.out.println("MyThread");
}
}
使用方法如下:
MyThread thread = new MyThread();
thread.start();
如此便开始执行此线程。如果调用代码“thread.run();”而不是“thread.start();”,其实就不是异步执行了,而是同步执行!
在调用start()的时候执行了如下几个步骤:
(1)通过JVM告诉操作系统创建Thread
(2)操作系统开辟内存并使用windosSDK中的createThread()函数创建Thread对象
(3)操作系统对Thread进行调度,以确定执行时机
(4)Thread在操作系统中被成功执行。
2. 实现Runnable接口
如果想创建的线程类已经有一个父类了,就不能再继承Thread类(因为Java不支持多继承),所以需要实现Runnable接口来解决这样的情况,把继承留给最需要的时候使用。
public class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("MyRunnable!");
}
}
使用方法如下:
Runnable runnable = new MyRunnable();
Thread thread = new Thread(runnable);
thread.start();










网友评论