线程基础知识
一:程序:一行一行的指令
线程:正在运行的程序
进程:进程执行中的执行个体单元
程序对进程:一对多 进程对线程:一对多
一个进程一定会有一个线程,我们之前写的所有程序都是单线程(main)
二:线程实现的三种方式:
1.自定义一个类,来extends继承Thread,重写run方法,并构造当前类的对象,通过调用start方法启动
2.自定义一个类,来实现Runnable接口,重写run方法,并构造当前类对象,再包装秤Thread对象,最后再调用start方法启动
3.匿名内部类Thread类的方式启动
4.三种方法的选择:
1.当当前类已经继承了一个类了,但是还需要多线程,则只能选择用Runable (implements Runnable)
2.当不需要再继承其他类的时候,毫不犹豫选择继承Thread(extends Thread)
3.线程逻辑很简单的,可以选择用匿名内部类方式做
5.什么时候选择用多线程?当程序中出现死循环的时候
线程同步
多个线程同时作用于。。比如该案例中两个线程(张三和李四)同时作用于一个账户。因此会出现线程同步问题。用Synchronized:同步锁关键字(1.可以锁住方法 2.可以锁住指定的某个代码块)就是说用Synchronized锁住多个线程共同作用的方法代码块。
当线程向之心同步代码块的时候,如果这个代码块已经正在其他线程操作,则会阻塞
案例:
张三和李四:是两夫妻
事情:他们在中国银行开了一个户头,张三拿了银行卡,李四拿了存着,存了5000块进去了
发生:某一条两个人没商量情况下,张拿着银行卡去了ATM机上准备去3000,正在这个时候,李四她也拿着存着,去柜台取钱,准备取4000
Wait...notify(等待...通知)
Wait 是等待 notify是通知 该案例模型中,容器中没有产品的时候,消费者等待;容器中有产品的时候,生产者等待。与此同时也会通知对方。
生产消费线程模型:
生产者和消费者共同对同一个容器进行不同操作,两者之间需要一个协同过程(wait...notify方式实现)
Notify通知wait的线程的时候(多个wait机制同时执行的时候),注意,是随机通知的
补充一点:wait和notify这两个方法一定要在同步关键字(Synchronized)中使用
代码注意:wait() 和notify()点(“.”)前面的就是synchronized括号后面的;synchronized只放在同步代码块里面;还有就是要在同一个容器里面。在定义的时候可将容器放在构造方法里面,以确保是同一个容器。
ArrayList<Phone>括号里面放的是手机Phone对象
线程池
1)线程的生命周期:某个线程对象由生到死的整个周期过程
2)线程在整个生命周期过程中,是不能够重复调用start来启动
执行线程(工人)因为人数确定,所以选择用数组当作容器。(效率较好)