多线程
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()方法,完成业务操作
等待 调用Object的wait()方法 阻塞 等待Io事件输入
死亡 run()方法执行完毕
线程的优先级:
线程的优先级是指,当两个或两个以上的线程同时处于就绪状态时,优先级高的线程会优先得到执行。
线程默认优先级为5级,线程优先级分为10级,数字越大,优先级越高。
线程同步:
线程同步是指,当两个或者两个以上的线程,同时访问同一个资源时,为了确保数据的安全,只允许同一个时间点,同一个共享资源只能被一个线程进行访问。
线程同步带来的结果:
1. 数据安全
2. 效率低
线程同步,使用同步关键字synchrinized来进行标识。
线程同步的实现方式有两种:同步方法和同步块
Java使用wait()、notify()和notifyAll()方法,完成线程间的通信。
这些方法是作为Object类中的final方法实现的。
这三个方法仅在Synchronized方法才能被调用。
Wait和sleep的区别:
1. sleep方法在线程类Thread中定义,wait方法在Object中定义。
2. Wait方法只能放在同步方法或同步块中,表示当前线程对资源进行等待。Sleep方法可以放在任何位置,表示当前线程休眠
3. Wait方法要释放对象锁,sleep方法不会释放对象锁。
4. Wait方法使用后,线程需要notify唤醒后才能继续执行。而sleep在休眠结束后,线程自动继续执行。
OSI模型 TCP/IP模型
应用层
表示层 应用层
会话层
传输层 传输层
网络层 网络互联层
数据链路层
物理层 网络接口层
!--[endif]-->!--[if>!--[endif]-->!--[if>!--[endif]-->!--[if>!--[endif]-->!--[if>!--[endif]-->!--[if>!--[endif]-->!--[if>!--[endif]-->!--[if>!--[endif]-->!--[if>!--[endif]-->!--[if>!--[endif]-->!--[if>!--[endif]-->!--[if>!--[endif]-->!--[if>以上是关于多线程的主要内容,如果未能解决你的问题,请参考以下文章