多线程(2)我们要掌握的
一:线程的实现(重点)
1.普通线程和多线程的区别
当我们是第一个图的时候,我们首先主线程后,调用run方法后我们就会一直执行run方法,知道run方法执行结束后,我们才能继续执行我们的主线程;
当我们第二图的时候,我们首先主线程,到调用start方法后,我们主线程和子线程可以同时执行。互补干扰。
2.线程是独立执行的路径。
①main称之为主线程,为系统的入口,用于执行整个程序。
②在一个进程中,如果开辟了多个线程,线程的运行由调度器安排调度,调度器是与操作系统相关,先后顺序是不能人为干预的。
③对同一份资源操作时,会存在资源抢夺问题,需要加入并发控制。
④线程会带来额外的开销,如cpu调度时间,并发控制开销
3.线程的创建
1.继承Thread(重点)
①自定义线程类继承Thread类
②重写run()方法,编写线程执行体
③创建线程对象,调用start方法启动方法。
线程不一定立即执行,cpu安排调度。
2.实现Runnable接口(重点)
创建线程方式2:实现Runnable接口,重写run方法,执行线程需要丢入runnable接口实现类,调用start方法。
①定义MyRunnable类实现Runnable接口
②实现run()方法,编写线程执行体
③创建线程对象,调用start()方法启动线程
小结:
①:继承Thread类
子类继承Thread类具备多线程能力
启动线程;子类对象.start()
不建议使用:避免单继承局限性
②:实现Runnable接口
实现接口Runnable具有多线程能力
启动线程;传入目标对象+Thread对象.start()
推荐使用:避免单继承局限性,灵活方便,方便同一个对象被多个线程使用
二:初始并发问题
发现问题:多个线程操作同一个资源情况下,线程不安全,数据紊乱
2.模拟兔子睡眠的run
二:线程状态
三:线程同步(重点)
四;线程通讯问题(重点)
五:高级主题