黑马程序员-多线程

来源:互联网 发布:尚学堂 java架构师 编辑:程序博客网 时间:2024/06/05 00:46
---------------------- android培训、java培训、期待与您交流! ----------------------

多线程技术:

概念:
 进程:应用程序在内存中所属空间.
 线程:是进程中用于控制程序执行的控制单元,执行路径。

 进程中至少有一个线程。


JVM启动时候,至少开启了两个线程,
 一个:主线程。
 一个:垃圾回收线程。

什么时候使用多线程呢?
 当多部分代码需要同时执行的时候,就需要多线程技术。


多线程运行的一个特性:随机性。
 那是因为CPU在不断做着切换造成的。


线程的状态:
1,创建。

2,运行。
 在运行之前,线程被start开启后,就具备了执行资格,但是不一定有执行权。
 这种状态,成为临时阻塞状态。

 当真正运行时,这时既有运行资格,又有执行权。

3,冻结
 放弃了执行资格,没有执行权。

4,消亡。


多线程要执行的代码都要存储到固定的位置上。
否则执行不到。

主线程要执行的代码存放在main方法中。
自定义线程执行的代码都存在run方法中。
该run方法可以通过两种形式获取。
 1,Thread类中。
 2,Runnable接口中。


创建线程的两种方式:
 1,继承Thread类。
  步骤:
  1,定义类继承Thread类。
  2,覆盖Thread类的run方法,让需要多线程执行的代码存放到run方法中。
  3,建立Thread类的子类对象,并调用start方法开启线程.

 2,实现Runnable接口。
  步骤:
  1,定义类实现Runnable接口。
  2,覆盖Runnable接口中的run方法,将多线程执行代码存储到run方法中。
  3,通过Thread类创建对象,并将Runnable接口的子类对象作为实际参数传递给Thread类构造函数。
   因为要让多线程明确要执行的代码所属的对象。
  4,调用Thread类的start方法开启线程。

 start()方法做了什么事情?
  1,开启了线程。
  2,让jvm执行了线程的run方法。


这种两种方式有什么区别?
 实现Runnable接口避免了单继承局限性。
 建议使用第二种实现Runnable接口的方式。


----------------

多线程的安全问题?
 当共享数据被多条语句所操作,这些语句被多线程分开执行
 (也就是这些语句被一个线程执行了一部分,就有其他线程参与进来)。
 会容易导致线程安全问题的产生。

解决方式:
 同步。(火车上的卫生间)

同步的好处:
 解决了线程安全问题。

同步的原理:
 其实就是可能引发安全问题的代码进行封装并加锁。

同步的前提:
 1,同步中必须有两个或者两个以上的线程。
 2,多个线程需要使用同一个锁。

同步的体现:
 1,同步代码块。
 2,同步函数。
 两者的区别:
  同步代码块可以使用任意锁。
  同步函数使用的锁是固定的。
   非静态同步函数使用的是this锁。
   静态同步函数使用的是 类的字节码文件对象  类名.class

 一般建议使用同步代码块。

同步的弊端:
 1,会降低效率,消耗资源,该消耗可以在允许范围内存在。
 2,同步的嵌套容易引发死锁

---------------------- android培训、java培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net/heima
原创粉丝点击