1.什么是进程?
可以理解为正在进行的程序。更专业的解释是:(右键任务管理器)其实对应的是应用程序在内存中开辟的空间。一个程序一旦开辟空间就意味着它在运行。进程只是负责开辟空间,不直接执行。
2.什么是线程?
线程:负责执行,负责进程中程序执行的控制单元。(又叫执行路径,执行情景。)
注意:
(1)一个进程中不可能没有线程。可以同时有多个执行路径,称为多线程。
(2)一个进程至少要有一个线程。
(3)开启多个线程是为了同时运行多个代码,每一个线程都有自己的内容,这个内容称为任务。
例子:360体检和垃圾清理同时进行
3.多线程的创建
多线程的创建。线程就是执行代码的,并发就是同时。
*创建线程步骤:
1.一个类继承Thread类
2.覆盖Thread类中的run方法
3.直接创建Thread类的子类对象
4.调用start方法开启线程,并调用线程的任务run方法执行
代码1:
// 线程的使用
public class Class1 {
public static void main(String[] args) {
c1();
}
// Runnable接口方式
public static void c2() {
MyThread myThread = new MyThread();
// 最后开启线程,调用start方法
new Thread(myThread).start();
for (int i = 1; i <= 10; i++) {
System.out.println("Class1类:" + i);
}
}
// Thread类方式
public static void c1() {
// 创建一个线程,实现方法一:继承Thread
TestThread testThread = new TestThread();
// 开启线程,调用线程的run()方法。
testThread.start();
for (int i = 1; i <= 10; i++) {
System.out.println("Class1类:" + i);
}
// 重新开始线程,重新new。
testThread = new TestThread();
testThread.start();
}
}
代码2:
// 线程优先级
public class Class2 {
public static void main(String[] args) {
ThreadA threadA = new ThreadA();
ThreadB threadB = new ThreadB();
threadA.setPriority(Thread.MAX_PRIORITY);
threadB.setPriority(Thread.NORM_PRIORITY);
threadA.start();
threadB.start();
System.out.println("main结束");
if (threadA.isAlive()) {
System.out.println("A线程运行");
} else {
System.out.println("A线程没有执行");
}
}
private int age = 10;
// 20
public void testThis(int age) {
this.age = age;
}
public static class ThreadA extends Thread {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println("A线程:" + i);
}
}
}
public static class ThreadB extends Thread {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println("B线程:" + i);
}
}
}
}