多线程

Posted chenqingde

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程相关的知识,希望对你有一定的参考价值。

 

单任务处理 :一个任务没有完成时不会进行别的任务。

 

多任务处理: 一个任务没有完成时,又在进行别的任务

 

 

多任务处理有两种类型:

                     基于进程

                     基于线程

 进程是指一种“自包容”的运行程序,由操作系统直接管理,直接运行,有自己的地址空间,每一个进程一开启都会消耗内存。

 

基于进程的特点是允许计算机同时运行两个或更多的程序。

 

在一个程序中,能够独立运行的程序片段叫做线程(Thread),线程是进程内部单一的顺序控制流。

 

一个进程拥有多个线程。多个线程共享一个进程的内存空间。

 

基于线程的多任务处理环境中,线程是最小的处理单位。

 

主线程:

       当一个程序启动时,就有一个进程被操作系统创建,与此同时一个线程也立刻运行,该线程通常叫做程序的主线程。

       简单来说,main方法一执行,就开启了主线程。每个进程至少有一个主线程

  主线程的特点:

1. 最先开始

2. 最后结束

3. 产生其他的子线程

4. 子线程结束后,清理子线程占用的内存资源

 

创建线程的方式:

1、继承Thread类,重写run()方法

2、实现Runnable接口,实现run()方法。

State()run()方法:

调用start()方法,会在主线程基础上,开启新的子线程,多个任务同时执行。

 

调用run()方法,是普通方法调用。不会再主线程基础上,开启新的子线程。需要在一个任务执行完毕时,才能执行另一个任务。

 

线程状态:

                            

技术图片 新建  创建Thread线

技术图片技术图片技术图片技术图片                                    

技术图片技术图片技术图片技术图片技术图片                              就绪  调用start();方法,启动线程。  

技术图片技术图片睡眠  调用线程sleep()方法                                    挂起  调用yield()方法,线程显式出让CPU控制权                  

技术图片技术图片技术图片                            运行 运行run()方法,完成业务操作    

技术图片技术图片等待 调用Objectwait()方法                                 阻塞   等待Io事件输入

                              死亡 run()方法执行完毕    

 

 

线程的优先级:

             线程的优先级是指,当两个或两个以上的线程同时处于就绪状态时,优先级高的线程会优先得到执行。

             线程默认优先级为5级,线程优先级分为10级,数字越大,优先级越高。

 

线程同步:

线程同步是指,当两个或者两个以上的线程,同时访问同一个资源时,为了确保数据的安全,只允许同一个时间点,同一个共享资源只能被一个线程进行访问。   

线程同步带来的结果:

1. 数据安全

2. 效率低

线程同步,使用同步关键字synchrinized来进行标识。

线程同步的实现方式有两种:同步方法和同步块

 

Java使用wait()notify()notifyAll()方法,完成线程间的通信。

这些方法是作为Object类中的final方法实现的。

这三个方法仅在Synchronized方法才能被调用。

 

Waitsleep的区别:

1. sleep方法在线程类Thread中定义,wait方法在Object中定义。

2. Wait方法只能放在同步方法或同步块中,表示当前线程对资源进行等待。Sleep方法可以放在任何位置,表示当前线程休眠

3. Wait方法要释放对象锁,sleep方法不会释放对象锁。

4. Wait方法使用后,线程需要notify唤醒后才能继续执行。而sleep在休眠结束后,线程自动继续执行。

 

OSI模型                                                          TCP/IP模型

技术图片应用层                                                                             

技术图片技术图片表示层                                                           应用层

会话层

 

技术图片传输层                                                           传输层

 

技术图片网络层                                                           网络互联层

 

技术图片数据链路层                                        

技术图片物理层                                                            网络接口层

以上是关于多线程的主要内容,如果未能解决你的问题,请参考以下文章

什么是多线程,多进程?

多线程和多进程模式有啥区别

多线程Java多线程学习笔记 | 多线程基础知识

java中啥叫做线程?啥叫多线程?多线程的特点是啥

c++ 多线程与c多线程有啥区别?

IOS多线程安全(线程锁)