1.为什么要用多线程,或者所生活中有哪些多线程
程序的顺序结构是,做完一件事之后才能做下一件事
但是有些事情是需要同时完成的,呼吸-吃饭-思考
1.1 进程-任务-task
每一个进程表示一个操作系统的任务,每个任务可能会有很多子任务
1.2 调度机制:抢占式调度
吃饭,人很多,但是窗口很少,只要前面的人打完饭了,下一个就立马去打饭
1.3 吃饭-吸气-思考
时间线(时间片)
三个人同时上厕所这是一个任务,每个人都是一个子任务
从老板的角度来看,这个事件(三个人上厕所任务),完成的时间是8:15-8:40
宏观上和微观上的有区别
8:15 8:20 8:25 8:30 8:35 8:40
张三 1 1
李四 1 1
王五 1 1
抢占式调度容易造成数据紊乱,比如这个一个没有完成可能会被另外一个拉出来
1.4 一个任务中的多个子任务,会导致堆和栈的数据被共享,进而引发线程不安全的问题
共享变量被修改的时候容易出现问题
2.java是如何实现多线程的
同时有多个程序,一个时间片多个任务在执行,但一个时间点只能有一个任务
1、通过继承Thread类实现
2、实现runnable接口
runable 太简单了,Thread封装了很多类
3、两种方法异同点:
a、使用接口的话,可以达到多继承的方法,避免业务单一化
b、使用接口的话,程序会更加健康,代码可以被多个线程共享,代码和数据个更加独立
c、后面使用线程池,默认的参数类型也是Runnable
d、但是及成果使用Thread 功能会更加多样化
为什么 Thread t=new Thread(new Runnable)
1、语法定义
2、runnable 的功能方法少,这样能通过这种方法继承更多方法
3、两种方法的实名周期
4、常见的Thread的方法
4、1 sleep()
4、2 interrupt():此方法专门打断sleep,提前醒来
4、3 线程的优先级
优先级高的线程,只能说明他有更多的可能,不能保证一定优先获取时间片
4、4 new Thread(Runable的实现类实例,Thread的重命名)
优先级的默认值 5,范围1-10
4、5 可以获得线程的ID
getID
4、6 可以获得当前的线程
Thread.currentThread();
4、7 获得名字
getName()