Java高级部分之线程重点总结(下)

2016年4月2日17:54:41

Java高级部分之线程重点总结(下)

作者:数据分析玩家

1、如何理解线程同步

所谓同步就是程序中的若干个步骤要么一次性全做,要么全不做

2、什么时候需要考虑线程同步的问题

当多个线程操作同一个资源,并且要求这些操作中的若干个步骤不能被中断的时候,这个时候就需要考虑线程同步的问题,否则的话就不能保证共享数据的一致性,也就不能保证程序的正确性。

3、线程同步问题产生的原因

线程同步问题产生的原因共有两个:

1>多个线程访问的是同一个资源

2>多个线程彼此之间在处理相同关键步骤的时候会切换到另外一个线程进行执行

例如:在售票程序中,第1行到第6行的代码它们本来是一个不可分割的整体,但是cpu可以在第1行到第6行的任意一个时间点上切换到另外一个线程进行执行,进而引出了线程同步的问题

4、对于线程同步的问题如何解决

线程同步的问题是通过synchronized机制来解决的

通过synchronized机制,保证这些关键的步骤在被某一个线程访问的时候,将不允许其它线程对该资源进行访问,直到该线程将这些关键的步骤执行完毕

例如:在售票程序中,通过synchronized机制,保证当a线程在执行第1行到第6行的代码时,b线程不能在执行这些代码

5、简述synchronized机制的整体用法

1>在单线程中加不加synchronized关键字无所谓,只有在多线程中加synchronized关键字才有意义

2>synchronized包含的内部操作在某一个时间点上只能被某一个线程霸占,即synchronized包含的内部操作要么一次性全做要么全不做

6、简述synchronized机制的具体用法

1>用synchronized来修饰某个方法

用synchronized修饰的方法,在某一个时间点上只允许有一个线程来执行,这个线程若没有执行完毕,其余的线程就不能执行这个方法,尽管cpu在多个线程之间来会的进行切换,但是其余线程却不能执行这个方法

1>用synchronized来修饰某个方法内部的某个代码块

用synchronized修饰的同步代码块,在某一个时间点上只允许有一个线程来执行,这个线程若没有执行完毕,其余的线程就不能执行这个同步代码块,尽管cpu在多个线程之间来会的进行切换,但是其余线程却不能执行这个代码块

7、简述在线程同步问题中常用的方法

1>this.wait():将执行this.wait()的当前线程转入阻塞状态,让出cpu的控制权

2>this.notify():假设执行this.notify()的当前线程为t1,如果当前时刻有其它线程因为执行this.wait()而陷入阻塞状态,则叫醒其中的一个,注意叫醒的不是本线程t1

3>所谓叫醒某个线程是另该线程从阻塞状态转入到就绪状态

                     

 

                                                                                                                                                2016年4月2日18:49:26

 

 

 

 

 

 

你可能感兴趣的:(Java重点核心重点)