一:使用多线程的优点:


      提高应用程序的响应,对于图形化界面更有意义,增加用户体验。


      提高CPU利用率


      改善 程序结构,将长又复杂的进程分为多个线程,独立运行。



二 .线程安全问题:         由于一个线程在操作共享数据的过程中,没有执行完毕的情况下,另外的线程参与进来,导致共享数据存在安全问题。


三 .解决办法:                在一个线程在操作共享数据完成以后,其他的线程才能参与进来。


四 .java中的解决办法:  使用线程同步,解决线程安全问题。




五:同步机制:


5.1  同步代码块



synchronized(对象){                                             //对象为  (同步监视器 俗称锁)由一个类的对象来充当,哪个线程获取此监视器,谁就执行大括号中的同步代码。 

 

  //需要被同步的代码;(操作共享数据的代码)       //共享数据:多个线程共同操作同一个数据(变量) 

 

  }


注意:所有的线程公用一个锁(同步监视器)


注意:在实现的方式中,考虑同步的话,可以使用this来充当锁,但是在继承的方式中,慎用this(是唯一的才可以用)




5.2  同步方法



synchronized还可以放在方法中声明,表示整个方法为同步方法。



public synchronized viod show(String name){ 

 

  ......... 

 

  }


保证当其中一个线程执行此方法时,其他线程在外等待直至此线程执行完此方法。





线程同步的弊端:由于同一时间只能有一个线程访问共享数据,效率变低了



六: 实现多线程的方式


实现runnable接口:


继承Thread:


两者都是实现run()方法。







七:线程的生命周期                   《---------------------------------失去cpu执行权


新建 --------------》就绪------------------【【【【阻塞】】】】-------------------------》运行---------------------》死亡


          start()                             -------------------------------》获得cpu执行权                   正常执行完/ERROR/stop()



八:线程死锁问题


不同的线程分别占用对方需要的同步资源部放弃,都在等待对方放弃自己需要的同步资源,就形成 了线程的死锁。


解决办法:专门的算法,原则,尽量减少同步资源的定义。