一:使用多线程的优点:
提高应用程序的响应,对于图形化界面更有意义,增加用户体验。
提高CPU利用率
改善 程序结构,将长又复杂的进程分为多个线程,独立运行。
二 .线程安全问题: 由于一个线程在操作共享数据的过程中,没有执行完毕的情况下,另外的线程参与进来,导致共享数据存在安全问题。
三 .解决办法: 在一个线程在操作共享数据完成以后,其他的线程才能参与进来。
四 .java中的解决办法: 使用线程同步,解决线程安全问题。
五:同步机制:
5.1 同步代码块
synchronized(对象){ //对象为 (同步监视器 俗称锁)由一个类的对象来充当,哪个线程获取此监视器,谁就执行大括号中的同步代码。
//需要被同步的代码;(操作共享数据的代码) //共享数据:多个线程共同操作同一个数据(变量)
}
注意:所有的线程公用一个锁(同步监视器)
注意:在实现的方式中,考虑同步的话,可以使用this来充当锁,但是在继承的方式中,慎用this(是唯一的才可以用)
5.2 同步方法
synchronized还可以放在方法中声明,表示整个方法为同步方法。
public synchronized viod show(String name){
.........
}
保证当其中一个线程执行此方法时,其他线程在外等待直至此线程执行完此方法。
线程同步的弊端:由于同一时间只能有一个线程访问共享数据,效率变低了
六: 实现多线程的方式
实现runnable接口:
继承Thread:
两者都是实现run()方法。
七:线程的生命周期 《---------------------------------失去cpu执行权
新建 --------------》就绪------------------【【【【阻塞】】】】-------------------------》运行---------------------》死亡
start() -------------------------------》获得cpu执行权 正常执行完/ERROR/stop()
八:线程死锁问题
不同的线程分别占用对方需要的同步资源部放弃,都在等待对方放弃自己需要的同步资源,就形成 了线程的死锁。
解决办法:专门的算法,原则,尽量减少同步资源的定义。