JAVA之多线程的安全问题(线程同步)

来源:互联网 发布:数据库报表是什么 编辑:程序博客网 时间:2024/06/10 13:10
一:使用多线程的优点:
      提高应用程序的响应,对于图形化界面更有意义,增加用户体验。
      提高CPU利用率
      改善 程序结构,将长又复杂的进程分为多个线程,独立运行。

二 .线程安全问题:         由于一个线程在操作共享数据的过程中,没有执行完毕的情况下,另外的线程参与进来,导致共享数据存在安全问题。
三 .解决办法:                在一个线程在操作共享数据完成以后,其他的线程才能参与进来。
四 .java中的解决办法:  使用线程同步,解决线程安全问题。


五:同步机制:
5.1  同步代码块

synchronized(对象){                                             //对象为  (同步监视器 俗称锁)由一个类的对象来充当,哪个线程获取此监视器,谁就执行大括号中的同步代码。
//需要被同步的代码;(操作共享数据的代码)       //共享数据:多个线程共同操作同一个数据(变量)
}
注意:所有的线程公用一个锁(同步监视器)
注意:在实现的方式中,考虑同步的话,可以使用this来充当锁,但是在继承的方式中,慎用this(是唯一的才可以用)

5.2  同步方法

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

public synchronized viod show(String name){
.........
}

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



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

六: 实现多线程的方式
实现runnable接口:
继承Thread:
两者都是实现run()方法。





七:线程的生命周期                   《---------------------------------失去cpu执行权
新建 --------------》就绪------------------【【【【阻塞】】】】-------------------------》运行---------------------》死亡
          start()                             -------------------------------》获得cpu执行权                   正常执行完/ERROR/stop()

八:线程死锁问题
不同的线程分别占用对方需要的同步资源部放弃,都在等待对方放弃自己需要的同步资源,就形成 了线程的死锁。
解决办法:专门的算法,原则,尽量减少同步资源的定义。





0 0
原创粉丝点击