A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 世界、末日 中级黑马   /  2015-6-9 22:33  /  313 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一、
1、多线程概述

什么是多线程?
一个应用程序有多条执行路径,线程是依赖于进程而存在的。
------------------------------------
二、多线程的实现方式一

1、创建多线程的方式一?
A创建一个类这个类继承Thread类
B重写run方法
C启动线程并执行

stat()方法做了几件事?
启动线程,自动调用run方法


线程越多越好吗?  
不是,因为没开一个线程系统必然会为它分配内存。

Thread类下setName,getName方法的作用?

setName()为线程命名
getName()获取线程的名称
-------------------------------------------
三、线程执行的随机性

1、为什么会出现线程执行的随机性?
因为在某个时间点CPU只会执行一个线程。
----------------------------------------------
四、多线程的实现方式二
1、实现多线程的方式二
A创建一个类去实现Runnable接口
B重写run方法
C创建MyRunnable对象mr
D把对象mr作为参数传递到Thread类的构造方法中,得到了Thread对象。

注意事项:
第二种方式可以直接调用getName()方法可以获取当前线程的名字吗?
不能不能直接调用,但是可以间接调用


----------------------------------------------------
五、有了Thread类为什么还要有实现Runnable接口
1、避免了单继承的局限性
2、只创建了一个资源对象节省空间,更好的实现了数据操作分离。


--------------------------------------------------------
六、线程的生命周期
1、线程的状态有
新建:创建一个线程对象
就绪:具备执行资格,不具备执行权
可能出现阻塞状态:都不具备
运行:都具备
死亡:线程对象变成垃圾,等待垃圾回收器回收

-----------------------------------------------------


十、十一、用实现Runnable接口的方式模拟卖票出现了,重复和负数的情况,及解决方法
1、出现重复和负数的产生原因:
因为线程随机性和延迟性

2、同步关键字是?
synchronized
3、如何解决重复和负数的情况:
加锁

4、多线程程序出问题的判断条件?

1、看是否有共享数据
2、看共享数据是否被多条语句操作
3、是否在多线程程序中
----------------------------------------------------
十二、 测试不同同步机制的锁对象
什么是同步代码块、同步方法:

同步代码块就是把锁加在方法中
同步方法其实就是把锁加在方法声明上


同步代码块和同步方法的锁对象是谁:
同步代码块:任意对象(这里不要用匿名对象)
同步方法的锁对象是谁this
静态的同步方法锁对象是该类的字节码文件对象

什么时候考虑用同步代码块的方式锁呢?
当方法中不是所有代码都需要加锁的时候

什么时候考虑用同步方法的方式锁呢?
当方法中所有的代码都需要加锁的时候。
---------------------------------------------------

十五、解决学生模拟出现的安全问题

-----------------------------------

十六、通过等待唤醒机制让数据依次出现

Object类中 wait()
让线程等待,调用它的对象是锁对象
Object类中 notify()
唤醒线程,调用它的对象是锁对象

---------------------------------------------------------
十七、等待唤醒机制的代码分析
回顾sleep方法和wait方法的区别?
sleep  Thread类中  不释放锁对象   只能等时间   
wait   Object类中  释放锁对象     它可以被唤醒
-------------------------------------------------------
十九、线程优先级
thread类下的public final int getPriority()
获取线程的优先级

thread类下的public final void setPriority(int newPriority)
设置线程的优先级

线程的默认优先级是(5),范围是1-10;

注意:线程优先级越大不代表它一定能先执行,也不代表它一定能先执行完

--------------------------------------------------------------
二十、暂停线程
1、thread类下的public static void yield()
暂停当前线程执行其他线程
2、yield()方法的作用或者用法?
让线程可以稍微的和谐一些,但是不能依赖它保证让数据依次出现
要想保证还得依靠等待唤醒机制。
-------------------------------------------------------------
二十一、加入线程

1、thread类下 public final void join()
哪个线程对象调用该方法,其他线程必须等待该线程执行完毕才能执行。

注意事项:
哪个线程对象想要作为加入线程,必须先启动该线程。
------------------------------------------------------------
二十二、守护线程

Thread类下的public final void setDaemon(boolean on)
将该线程设置为守护线程


1、熟练掌握多线程实现的 方式一 方式二
2、自己分组互相讲一下多线程的生命周期
3、自己把上课敲的重点知识回顾一遍。
4、回顾Xmind
5、用方式二模拟多线程卖票,要求卖票的时候不能有相同的票,和负数。
6、面试题:请写出一个死锁的代码。
7、用多线程模拟学生类数据通讯(数据要依次出现)
8、针对有7的代码进行改进优化。
9、把19-22中讲的方法自己测试一遍。






0 个回复

您需要登录后才可以回帖 登录 | 加入黑马