
线程的五种状态:
要想实现多线程,必须在主线程中创建新的线程对象,java语言使用Thread类及其子类的对象来表示线程,在它的一个完整的生命周期中通常要经历如下的五种状态:
新建:当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态
就绪:处于新建状态的线程被start()后,将进入线程队列等待CPU时间片,此时它已具备了运行的条件。
运行:当就绪的线程被调度并获得处理器资源时,便进入运行状态,run()方法定义了线程的操作和功能。
阻塞:在某种特殊情况下,被人为挂起或执行输入输出操作时,让出CPU并临时中止自己的执行,进入阻塞状态
死亡:线程完成了它的全部工作或者线程被提前强制性地中止

线程安全问题存在的原因?
由于一个线程在操作共享数据过程中,未执行完毕的情况下,另外的线程参与进来,导致共享数据存在了安全问题
如何解决线程安全的问题?
必须让一个线程操作共享数据完毕以后,其它线程才有机会参与共享数据的操作,
java是如何实现线程的安全,线程的同步机制
方式一:同步代码块
synchronized(同步监视器){
//需要被同步的代码块(即为操作共享数据的代码)
}
1.共享数据:多个线程共同操作的同一个数据(变量)
2.同步监视器: 由一个类的对象来充当,哪个线程获取此监视器,谁就执行大括号里被同步的代码,这个同步监视器其实就叫锁
要求:所有的线程必须公用同一把锁!
注:在实现的方式中,考虑同步的话,可以使用this来充当锁,但是在继承的方式中,慎用this,(是不是只有唯一的一个对象,如果是多个,就不能用)如果是继承的话,锁一定是同一个 (全局的变量)
方式二:同步方法
将操作共享数据的方法声明为synchronized.即此方法为同步方法,能够保证当其中一个线程执行此方法时,其它线程在外等待直至此线程执行完此方法。以此种方法来确保线程的安全
线程的死锁问题:
不同的线程分别占用对方需要的同步资源不放弃,都在等待对方放弃自己需要的同步资源,就形成了线程的死锁
3342

被折叠的 条评论
为什么被折叠?



