黑马程序员---多线程
来源:互联网 发布:des算法c语言实现 编辑:程序博客网 时间:2024/05/18 03:28
------- android培训、java培训、期待与您交流! ----------
线程是什么
进程:简单理解成一个应用程序.
线程:是进程的一个独立单元片段,多个线程组成了一个进程.线程在控制着进程的执行.一个进程中至少有一个线程.
多线程:有多条通路可以执行我们的程序,它提高了我们程序的效率.
JVM启动时启动了几个线程?
它在启动时启动了两条线程,一个非守护线程(main线程),第二个(守护线程)垃圾回收线程.
java是面向对象的语言,java中的县城不是面向对象的.它在处理线程操作时,与C语言相比有明显的缺点.
java中的线程创建方式
java.lang.Thread类就是java中的线程类.
我们电脑打开多个程序时,哪一个线程被执行,是由cpu分配时间片来确定的.那么对于我们的多个线程来说,理想状态下是多个线程都是一起执行,
但是因为硬件的原因,一次只能有一个线程获得时间片,获得时间片的县城才能真正被执行,没有获得时间片的线程,它们排队等待,对于优先级高的线程,
它就会排在前面,当cpu在分配时间片时,它就会优先执行.
java中的线程优先级共有10个,默认是5,最高的是10,最低是1.
java创建有两种方式:
1.将我们自己的类声明成Thread类的子类 (extends Thread)
步骤:
将当前类继承自Thread类
重写父类中的run方法
启动线程,调用Thread类中的start方法.
2.声明自己的类实现Runnable接口. (implements Runnable)
步骤:
创建一个类实现Runnable接口
将接口中的run方法重写
启动线程,调用Thread类中的start方法.
问题:当实现Runnable接口时,怎样启动线程?
将实现Runnable接口的类的对象作为一个参数传递给一个Thread类对象 new Thread(实现了Runnable接口的对象).start()方法.
线程中的方法:
run()方法:作用是用来定义我们自己的线程要执行的内容.
start() 启动线程
java中启动线程start方法与直接调用run方法的区别
start方法是JVM重新开辟一条通过,去调用线程类中的run方法的内容.
java中线程的执行无序性
多个线程在执行时,它的执行顺序是由cpu时间片来分配的,我们无法控制,它的执行结果会产生无序性.
在实际开发中我们选择哪一种方法去创建线程?
首选接口
原因:1使用接口可以让我们的程序扩展性更强 一个类只能继承一个父类,但可以实现多个接口.
2.使用extends Thread类是想使用多个线程操作公共数据
那么这个数据要是static,如果不是static,而是实例属性,那么代表的是每个线程操作的都是自己的属性.
static属性的缺点:它的生命周期太长,所占用的内存一直得不到释放
使用implements Runnable接口时,多个线程在操作公共数据时,这个属性可以是实例属性,因为只有一个实现了Runnable接口的对象.
要想去创建线程并启动它,是通过new Thread(Runnable runnable)这样的方式去创建线程对象的.
线程中常用的方法
start: 启动线程
run: 用来定义线程的执行内容
设置线程优先级
public fial void setPriority(int newPriority)更改线程的优先级.
设置线程的名称与获得现线程的名称:
setName(String name) 用来设置线程的名称
String getName() 用来获得县城的名称
static Thread currentThread();
功能:得到当前正在执行的线程的引用
返回值:只在执行的线程的引用
static方法可以直接通过类名调用
子线程的默认名称:THread-编号
主线程的名称:main
默认的优先级:5
线程的状态
创建:new 出一个线程对象
执行:执行run的内容,其实就是cpu将时间片分配给某个线程,它就具有了执行权.
销毁:线程执行结束,run结束或stop
冻结:是线程遇到了sleep或wait时由运行变成冻结,当冻结状态结束后不一定回到运行状态,有可能回到临时堵塞状态.
临时堵塞:当前线程具有执行的资格 ,但是没有执行权,也就是说线程启动了,但是cpu没有分配给它时间片,只能排队等待.
同步线程(线程安全)
线程安全问题产生的原因:
多个线程通过多条语句去操作共享数据
怎样解决线程的安全问题:
当某一个线程在操作数据时,它没有操作完,就不允许其他线程来操作.只有当这个线程操作结束后,才允许其他线程来操作.我们把这种机制叫做锁的机制.
线程的同步问题:
两种解决方式:
1.使用Synchronized 块
Synchronized(对象) {
多条语句操作的数据
}
锁的对象可以是任意对象
2.使用synchronized 方法
使用同步代码块解决安全问题注意事项
所有的线程在操作时,姚宝成线程是案例的,必须保证所使用的锁是同一个.
同步方法:其实就是使用synchronized 去修饰一个方法.
同步代码块与同步方法的原理是一样的,区别在于它们所控制的范围不一样.同步方法是它将整个方法都锁定,线程没有执行完这个方法,其他线程是不能执行的.
而同步代码块我们可以控制方法中的某一部分去锁.
在实际操作中建议使用不同代码块.
同步的弊端:
多线程的优点:提高效率
使用同步后就使得多线程程序的效率降低.
死锁:
死锁是怎样产生的:死锁多个线程互相持有对方锁.
怎样避免死锁的产生:
死锁一般出现的原因就是嵌套问题,要想避免产生死锁,就尽量少用嵌套.
------- android培训、java培训、期待与您交流! ----------
- 黑马程序员 多线程
- 黑马程序员:多线程
- 黑马程序员-java多线程
- 黑马程序员--java 多线程
- 黑马程序员_java多线程
- 黑马程序员-java多线程
- 黑马程序员_多线程
- 黑马程序员 多线程
- 黑马程序员_JAVA多线程
- 黑马程序员—多线程
- 黑马程序员- 多线程
- 黑马程序员_多线程
- 黑马程序员--多线程
- 黑马程序员_多线程
- 黑马程序员--Java多线程
- 黑马程序员---多线程
- 黑马程序员__多线程
- 黑马程序员_多线程
- 两个版本的oracle,装在一台主机上
- Sublime text 3如何安装package control办法
- Leetcode: Interleaving String
- 各大网站架构总结笔记(续)(转)
- 各大网站架构分析
- 黑马程序员---多线程
- win7(64)未在本地计算机上注册 Microsoft.Jet.OLEDB.4.0 提供程序
- ubuntu安装英伟达显卡GT 540M驱动
- 2012-2013下学期八年级期末考试成绩公布表
- Qt 4.7.1的移植[未上图]
- VMware安装WMware tools
- 打开苹果自带地图进行导航
- Validate Binary Search Tree
- 各大网站架构总结笔记