什么是进程?
进程是系统进行资源分配和调用的独立单元, 每一个进程都有它的独立内存空间和系统资源.
单进程操作系统和多进程操作系统的区别
单进程操作系统: dos (一瞬间只能执行一个任务)
多进程单用户操作系统: Windows(一瞬间只能执行多个任务)
多进程多用户操作系统: Linux(一瞬间只能执行多个任务)
现在的多核 CPU 是否可以让系统在同一个时刻可以执行多个任务?
理论上是可以的.
什么是线程? 理解线程和进程的关系
什么是线程?
线程是进程里面的一条执行路径, 每个线程共享进程里面的内存空间和系统资源
一个进程可以有多个线程: 各个线程都有不同的分工.
理解线程和进程的关系
进程和进程之间的关系: 进程之间的内存空间和系统资源是独立的
同一个进程里的多条线程: 线程之间的内存空间和系统资源是共享的.
进程里: 可以有一条或一条以上的线程.
进程里可以有多条线程的情况下, 只有一条线程叫做主线程.
线程是在进程里的, 突然们是包含关系
我们的应用软件有哪些是多线程的应用?
都是
Java 中, 如何来编写多线程的应用程序? 有那些方法?
1. 线程类 – 创建 MyThread 类, 继承Thread, 重写 run 方法
class MyThread extends Thread{
//当前线程抢到cpu资源后,就会执行run方法
@Override
public void run() {
System.out.println("当前线程抢到资源了");
}
}
public class Test01 {
public static void main(String[] args) {
//创建线程的对象
MyThread t = new MyThread();
//启动线程
t.start();
}
}
2. 任务类 – 创建Task类,实现Runnable接口中的run方法
class Task implements Runnable{
//当前线程抢到cpu资源后,就会执行run方法
@Override
public void run() {
System.out.println("抢到资源了");
}
}
public class Test01 {
public static void main(String[] args) {
Thread t = new Thread(new Task());
t.start();
}
}
3. 带返回值的任务类
4. 线程池
线程的优先级别
需求:在主线程中创3个子线程,并且设置不同优先级,观察其优先级对线程执行结果的”影响”。
public class MyThread extends Thread{
public MyThread(String name){
super(name);
}
@Override
public void run() {
// 获取当前线程对象
Thread t = Thread.currentThread();
for (int i=1;i<=100; i++){
System.out.println(t.getName() + ":" + i);
}
}
}
public class Test01 {
public static void main(String[] args) {
MyThread a = new MyThread("A");
MyThread b = new MyThread("B");
MyThread c = new MyThread("C");
//设置优先级别
a.setPriority(Thread.MAX_PRIORITY);
a.setPriority(Thread.NORM_PRIORITY);
a.setPriority(Thread.MIN_PRIORITY);
a.start();
b.start();
c.start();
}
}
给线程自定义名称
- 给 MyThread 定义私有属性
public class MyThread extends Thread{
private String threadName;
public MyThread(String threadName){
this.threadName = threadName;
}
@Override
public void run() {
for (int i=1; i<=100; i++){
System.out.println(threadName + ":" + i);
}
}
}
public class Test01 {
public static void main(String[] args) {
MyThread a = new MyThread("A");
MyThread b = new MyThread("B");
MyThread c = new MyThread("C");
// 设置优先级别
a.setPriority(Thread.MAX_PRIORITY);
b.setPriority(Thread.NORM_PRIORITY);
c.setPriority(Thread.MIN_PRIORITY);
b.start();
c.start();
a.start();
}
}
- 将 name 属性传递给父类, 通过当前线程对象获得线程名
public class MyThread extends Thread{
public MyThread(String name){
super(name);
}
@Override
public void run() {
// 获取当前线程对象
Thread t = Thread.currentThread();
for (int i=1;i<=100; i++){
System.out.println(t.getName() + ":" + i);
}
}
}
public class Test01 {
public static void main(String[] args) {
MyThread a = new MyThread("A");
MyThread b = new MyThread("B");
MyThread c = new MyThread("C");
//设置优先级别
a.setPriority(Thread.MAX_PRIORITY);
a.setPriority(Thread.NORM_PRIORITY);
a.setPriority(Thread.MIN_PRIORITY);
a.start();
b.start();
c.start();
}
}
让线程休眠
注意: main方法后的 throws InterruptedException
import java.util.Random;\
public class Test01 {
/*
知识点: 线程的休眠
需求:
编写一个抽取学员回答问题的程序, 要求倒数三秒后输出被抽中的学员姓名
*/
public static void main(String[] args) throws InterruptedException{
String[] names = {
"麻生希", "椎名空", "水菜丽", "北岛玲", "爱田奈奈",
};
Random random = new Random();
int index = random.nextInt(names.length);
for (int i=3;i>0;i--){
System.out.println(i);
// Thread 的静态方法 -- sleep (毫秒), 表示让当前线程休眠
Thread.sleep(1000);
}
System.out.println(names[index]);
}
}
线程的礼让
线程的合并
线程的中断
守护线程
线程局部变量(实现线程范围内的共享变量)
线程的生命周期
后续持续更新…