什么是多线程和线程问题

4. 多线程

什么是多线程,一组独立功能的静态计算机指令:

进程是一次程序动态的运行过程,他有就绪,阻塞,运行等状态。

进程:向系统申请资源的独立单位。

案例:开了一个QQ。就是开了一个进程,再打开迅雷,又开了一个进程,那我们在QQ上可以传输文字,语音,广告弹出,理解为开了一个线程,换句话理解就是线程是任务,一个进程可以管理多个线程,进程里面会至少包括一条线程,通俗地讲,进程是领导,线程是员工,进程管理线程,进程本身不执行,只是为线程提供运行环境申请内存空间。

进程的切换代价非常的大

1.单进程单线程:一个人在一个桌子上吃菜。
2.单进程多线程:多个人在同一个桌子上一起吃菜。
3.多进程单线程:多个人每个人在自己的桌子上吃菜。

多线程:

(1)一个进程里面同时执行多个任务。

(2)一个进程里面至少有一个线程

(3)开启多个线程是为了同时执行多个任务,也是同时执行多部分代码。

利弊:

好处:解决了多任务同时执行的问题。

弊端:线程切换花费额外的资源,同时切换也是一个耗时的步骤。

如何让创建线程:

第一种方式

(1)将类声明为Thread的子类

(2)然后将这个子类重写run方法

(3)创建子类对象

(4)开启线程

     一般来讲,耗时的方法都不放在主线程里,

    

线程的常用属性: name获取线程的名字,默认为Thread-x

这种方式开启多线程,要求该类不能在继承其他的父类,因为java是单继承。但是我们可以用接口的方式来扩展。

第二种方式:创建一个类,实现runnable接口,实现了run方法,创建线程Thread(myRunnable)开启。

一般我们都是使用第二种方法创建线程,

注意:线程的开启是用start,而不是直接run,如果直接使用run,那程序的执行就和函数的调用没有区别了,一直在调用主线程。

线程调度:

线程的优先级:

调整线程的优先级只是提高CPU执行这条线程的概率,并不一定执行完毕再去执行其他线程。

线程让步:

线程插队:

线程安全:

出现线程安全的条件

(1)多个线程同时访问共享资源(共享数据)

(2)操作共享数据的代码有多条

     解决办法:

对于不能被同步执行的代码,我们只要保证当前有一个线程执行的时候,其他线程不能进入执行。

类似公共厕所,进入之后先上锁,离开之后先开锁,这个就保证里面只有一个人在使用。

Java中提供给我们一种“同步代码块”可以解决这个问题

好处:解决了线程安全的问题

坏处:相对降低了效率,因为每次都要去判断是否有同步锁。

猜你喜欢

转载自blog.csdn.net/zyz0225/article/details/80738016