一、
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
静态的同步方法锁对象是该类的字节码文件对象
什么时候考虑用同步代码块的方式锁呢?
当方法中不是所有代码都需要加锁的时候
什么时候考虑用同步方法的方式锁呢?
当方法中所有的代码都需要加锁的时候。
---------------------------------------------------
1、熟练掌握多线程实现的 方式一 方式二
2、自己分组互相讲一下多线程的生命周期
3、自己把上课敲的重点知识回顾一遍。
4、回顾Xmind
5、用方式二模拟多线程卖票,要求卖票的时候不能有相同的票,和负数。
6、面试题:请写出一个死锁的代码。
|
|