多线程执行需要的strat方法和run方法(重要)

目录

CPU的执行

多线程

线程start()

 run方法


CPU的执行

讲线程之前我们需要了解一个信息就是线程的运行是通过CPU来执行的

如下图打开任务管理器可以看到显示了CPU是几核的,有多少进程和线程

单核CPU一个时刻只能做一件事

四核CPU一个核一个时刻只能执行一个线程,所以CPU执行任务的时候是在快速切换任务,对应着分时操作系统

一般来说的话 linux一个任务,也就是一个线程执行在20ms左右,Windows几毫秒到几十毫秒不确定

多线程

现在我们可以开始讲多线程了

先看下面的这个程序,我们可以看出,虽然是t1线程先启动的,但是为什么执行出来的时候是t2线程先执行的呢?我们可以思考一下这个问题

线程start()

start()表示进去就绪态,不表示立刻执行,这个我们讲start方法最主要的一点

start()执行后会把线程的地址存在就绪队列中,同时start()方法会在栈中开辟一个新的空间,只要空间开辟出来,start()方法就结束了,新的线程启动成功,start()执行完毕后会在栈中创建一个新的线程栈,这里结合着下面的堆栈图理解

CPU执行一个线程时,如果另一个线程start了,这个线程就进入到了就绪态,等待上一个线程执行完,由于操作系统采用的时非公平的策略,CPU会从就绪队列随机选择一个线程执行(人为不可控),所以子线程的执行的顺序不确定,但由于子线程是依赖主线程启动的,所以一般主线程比子线程先启动,但主线程也不一定先执行完,这是为什么呢?

因为在分时操作系统中,线程在执行的过程中,时间片的时间到了,就会产生线程切换,就是在执行主线程的时候,有可能会切换到其中一个子线程执行,子线程执行的时候可能会切换到另一个子线程执行,从而导致主线程的执行完毕的顺序可能排在子线程后面

 

 run方法

run方法就很简单了,run方法就是开始跑线程,

是实现线程的一个途径而已,我们实现线程的一种方法就是继承Thead类,然后我们就必须重写run方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值