黑马程序员 课堂笔记-心得 多线程及同步锁

---------------------- android培训java培训、期待与您交流! ----------------------


今天下雨了,天气有点凉。

休息了一天,身体好了点,学习的专注度提高了。今天学习多线程的状态,创建线程的第二种方式,多线程产生的安全问题和同步锁。

首先讲了多线程的状态,线程被创建,有运行状态,冻结状态,临时阻塞状态,然后线程的消失。运行状态具有cpu的执行权和执行资格。执行资格是可以被cpu处理,在处理队列中排队,执行权是正在陪cpu处理。运行状态可以通过sleepwait方法转换到冻结状态,冻结状态失去了cpu的执行权和执行资格。当cpu在随机切换的时候,没有被cpu处理的状态叫做临时阻塞状态,拥有cpu的执行资格。Cpu的临时阻塞状态和运行状态来回的切换,冻结状态可以转变为临时阻塞状态,而临时阻塞状态需要转换到运行状态才能转换到冻结状态。

创建线程的第二种方式是实现Runnable接口

1,定义类实现Runnable接口

2,覆盖接口中的run方法,将线程任务代码封装到run方法中

3,通过Thread类创建线程对象,并将Runnable接口的子类对象作为构造函数的参数进行传递。(因为线程的任务都封装在Runnable接口子类对象的run方法中,所以要在线程对象创建时就必须明确要运行的线程任务)

4,调用线程对象的strat方法开启线程

实现Runnable接口的好处

1,将线程的任务从线程的子类中分离出来,继续了单独的封装。按照面向对象的思想将任务封装成对象。

2,避免了java单继承的局限性。

所以这种方式较为常用。

多次启动一个线程是非法的。

线程安全问题产生的原因:

1,多个线程在操作共享的数据。

2,操作共享数据的线程代码有多条。

当一个线程在执行操作共享数据的多条代码过程中,其它线程参与了运算,就会导致线程安全问题的产生。

解决思路:将多台哦操作共享数据的线程代码封装起来,当有线程在执行这些代码的时候,其它线程是不可以参与运算的,必须要等当前线程把这些代码都执行完成后,其它线程才可以参与运算。

关键字synchronized,称为同步,用同步块和同步方法解决这类问题。

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

同步的弊端:相对降低了效率,因为同步外的线程都会判断同步锁。

同步的前提:同步中必须有多个线程并使用一个锁。

同步函数和同步代码块的区别:

同步函数的锁是固定的this

同步代码块的锁是任意的对象。

还介绍了多线程下的单例,懒汉式需要用同步快解决安全性问题,需要用if语言判断来解决效率问题。

最后讲了死锁。常见的情景之一就是同步的嵌套

 

 

    通过今天的学习,让我意识到上次最后2天的学习内容没掌握扎实,特别是object类那部分,晚自习加强了解了一下。今天的代码运行时,出现设想情况比较难,需要把循环次数往上加。巩固了单例设计模式中的细节。初步掌握死锁的设计,今后需要巩固。总体来说今天的总的知识点不多,但是需要理解的内容比较细。今天评价掌握一般。

 

---------------------- android培训java培训、期待与您交流! ----------------------详细请查看: http://edu.csdn.net/heima
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值