Java -- 多线程

本文介绍了进程的基本概念,区分了单进程和多进程操作系统,探讨了多核CPU如何并发执行任务,以及线程的概念和进程线程的关系。重点讲解了Java中创建多线程的方法,包括继承Thread、实现Runnable接口,以及线程优先级、命名、休眠和中断等特性。
摘要由CSDN通过智能技术生成

什么是进程?

进程是系统进行资源分配和调用的独立单元, 每一个进程都有它的独立内存空间和系统资源.

单进程操作系统和多进程操作系统的区别

单进程操作系统: 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();
    }
}

给线程自定义名称

  1. 给 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();
    }
}
  1. 将 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]);
    }
}

线程的礼让

线程的合并

线程的中断

守护线程

线程局部变量(实现线程范围内的共享变量)

线程的生命周期

后续持续更新…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值