线程基本概念 多线程原理

线程相关概念
** 程序**
是为完成特定任务,用某种语言编写的一组指令的集合.

** 进程**
1 进程是指运行中的程序,比如我们使用的QQ就是一个进程,操作系统就会为该进程分配内存空间.当我们使用迅雷时,又启动了一个进程,操作系统将为迅雷分配新的内存空间

2 进程是程序的一次执行过程,或是正在运行的一个程序.是动态的过程 :有它自身的产生、存在和消亡的过程

在这里插入图片描述
什么是线程?
1 线程是由进程创建的,是进程的一个实体
2 一个进程可以拥有多个线程,如下图
线程1,2,3 包括运行的迅雷都在一个进程之中
在这里插入图片描述
其他相关概念
1 单线程 : 同一个时刻 ,只允许执行一个线程
2 多线程 : 同一个时刻 ,可以执行多个线程 ,比如: 一个qq进程,可以同时打开多个聊天窗口,一个迅雷进程,可以同时下载多个文件
3 并发 :同一个时刻,多个任务交替执行,造成一种貌似同时的错觉,简单说,单核cpu实现多任务就是并发
(并发 :宏观上同时进行,但是一个时间片只有一个线程在执行)
并发示意图 ,cpu的指针在QQ和迅雷之间不断地同时切换
并发示意图 ,cpu的指针在QQ和迅雷之间不断地同时切换

4 并行 :同一个时刻,多个任务同时执行.多核cpu可以实现并行.
并行示意图
并行示意图
在这里插入图片描述
代码实现查询cpu数
在这里插入图片描述
多线程实例

public class Thread01 {
    public static void main(String[] args) throws InterruptedException {

        //创建cat对象,可以当做线程使用
        Cat cat = new Cat();
        cat.start();

        //main线程启动一个子线程Thread-0,主线程不会阻塞,会继续执行
        for(int i = 0 ; i < 60 ;i++){
            System.out.println("主程序 i = "  + i );
            //让主程序休眠
            Thread.sleep(1000);
        }
    }
}
//1. 当一个类继承了Thread类,该类就可以当做线程使用
//2. 我们会重写 run 方法,写上符合自己的业务代码
//3. run Thread 类 实现了 Runnable 接口的方法

class Cat extends Thread{
    int times = 0;
    public void run(){
        while(true){
            //休息(睡眠)一秒
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("子线程 hello,world!" + ++times);
            if (times == 80){
                break;
            }
        }
    }
}

其中为什么cat调用start方法而不直接调用run方法呢?
(1)因为run方法就是一个普通方法,没有真正的启动一个线程,就会把run方法执行完毕后,再执行下面的方法.
或者说run方法再main线程中执行,串联机制
(2)真正实现多线程的效果,是start0() ,而不是run
start0()是本地方法,是JVM机调用,底层是c/c++实现
在这里插入图片描述

多线程原理
在这里插入图片描述
如上图,当程序开始以后会先开一个新的进程,新的进程中,main线程开启,然后thread-0线程开启,当main线程先数完60个数以后挂掉了,thread-0线程仍会继续,这时进程仍然在,当thread-0线程数到80也挂掉时,那么进程最后才会关闭.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值