线程基础知识

一:程序:一行一行的指令

线程:正在运行的程序

进程:进程执行中的执行个体单元

程序对进程:一对多             进程对线程:一对多

一个进程一定会有一个线程,我们之前写的所有程序都是单线程(main

 

二:线程实现的三种方式:

1.自定义一个类,来extends继承Thread,重写run方法,并构造当前类的对象,通过调用start方法启动

2.自定义一个类,来实现Runnable接口,重写run方法,并构造当前类对象,再包装秤Thread对象,最后再调用start方法启动

3.匿名内部类Thread类的方式启动

Java基础知识----线程

4.三种方法的选择:

1.当当前类已经继承了一个类了,但是还需要多线程,则只能选择用Runable       implements Runnable

2.当不需要再继承其他类的时候,毫不犹豫选择继承Threadextends  Thread

3.线程逻辑很简单的,可以选择用匿名内部类方式做

5.什么时候选择用多线程?当程序中出现死循环的时候

 

线程同步

多个线程同时作用于。。比如该案例中两个线程(张三和李四)同时作用于一个账户。因此会出现线程同步问题。用Synchronized:同步锁关键字(1.可以锁住方法   2.可以锁住指定的某个代码块)就是说Synchronized锁住多个线程共同作用的方法代码块。

当线程向之心同步代码块的时候,如果这个代码块已经正在其他线程操作,则会阻塞

 

案例:

 张三和李四:是两夫妻

 事情:他们在中国银行开了一个户头,张三拿了银行卡,李四拿了存着,存了5000块进去了

 发生:某一条两个人没商量情况下,张拿着银行卡去了ATM机上准备去3000,正在这个时候,李四她也拿着存着,去柜台取钱,准备取4000

Java基础知识----线程

Wait...notify(等待...通知)

Wait 是等待      notify是通知    该案例模型中,容器中没有产品的时候,消费者等待;容器中有产品的时候,生产者等待。与此同时也会通知对方。

生产消费线程模型:

生产者和消费者共同对同一个容器进行不同操作,两者之间需要一个协同过程(wait...notify方式实现)

Notify通知wait的线程的时候(多个wait机制同时执行的时候),注意,是随机通知的

补充一点:waitnotify这两个方法一定要在同步关键字Synchronized中使用

Java基础知识----线程

代码注意:wait() notify()点(.)前面的就是synchronized括号后面的;synchronized只放在同步代码块里面;还有就是要在同一个容器里面。在定义的时候可将容器放在构造方法里面,以确保是同一个容器。

Java基础知识----线程

ArrayList<Phone>括号里面放的是手机Phone对象

线程池

1)线程的生命周期:某个线程对象由生到死的整个周期过程

2)线程在整个生命周期过程中,是不能够重复调用start来启动

 Java基础知识----线程

执行线程(工人)因为人数确定,所以选择用数组当作容器。(效率较好)

 

 

 

相关文章: