黑马程序员--基础复习2012.8.14 多线程

来源:互联网 发布:用jquery遍历数组 编辑:程序博客网 时间:2024/06/06 11:00
---------------------- android培训、java培训、期待与您交流! ----------------------

进程:一个正在执行中的程序。

              每个进程执行都有一个执行顺序。该顺序是一个执行路径,或者叫一个控制单元

       线程:进程中的一个独立的控制单元,线程控制着进程的执行。

                     一个进程中至少有一个线程。

创建线程的第一种方式

1、  定义类继承Thread类

2、  覆写Thread类中的run方法

将自定义代码存储在run方法,让线程运行

3、  调用start方法

启动线程,调用run方法。

创建线程的第二种方式

1、  定义类实现Runnable接口

2、  覆盖Runnable接口中的Run方法

将线程要运行的代码存放在run方法中

3、  通过Thread类建立线程对象

4、  将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数

自定义的run方法所属的对象是Runnable接口的子类对象,所以要让线程去执行指定对象的run方法

5、  将Thread类的start方法开启线程并将带哦用Runnable接口子类的run方法

 

为什么覆盖run方法?

       Thread类用于描述线程,定义一个功能,用于存储线程要运行的代码。该存储功能是run方法。Thread类中run方法用于存储线程要运行的代码。

 

继承方式和实现方式的区别

实现方式的好处,避免了单继承的局限性

在定义线程时,建议使用实现方式

 

继承Thread:线程代码存放在Thread子类run方法中。

实现Runnable,线程代码存在接口的子类的run方法中。

 

多线程安全问题

       当多条语句在操作同一个线程共享数据时,一个线程对多条语句值执行了一部分还没执行完,另一个线程参与进来执行,导致共享数据的错误。

       对操作共享数据语句只允许一个线程都执行完。

       synchronized锁

同步的前提

1,  必须要有两个或者以上的线程

2,  必须是多个线程使用同一个锁

好处:解决了多线程安全问题;弊端:需要判断锁,较为消耗资源

线程的状态


       死锁,同步中嵌套同步。

 

       waitnotfy notifyall 都使用在同步中,因为要对持有监视器(锁)的线程操作

所以要使用在同步中,因为只有同步才具有锁

 

为什么这些操作线程的方法要定义在Object类中?

因为这些方法在操作同步线程时,都必须要标识它们所操作线程只有锁,

只有同一个锁上的被等待线程,可以被同一个锁上notify唤醒

不可以对不同锁中的线程进行唤醒

 

也就是说,等待和唤醒必须是同一个锁。

 

而锁可以是任意对象,所以可以被任意对象调用的方法定义在Object类中。

 

将同步Synchronized替换成显示的lock操作。

将Object中的wait notify notifyAll,替换成Condition对象

Lock

       lock  unlock

Condition

       awaitsignal singnalAll

 

线程停止

只有一种run方法结束。

开启多线程运行,运行代码通常是循环结构,只要控制住循环,就可以让run方法结束,也就是线程结束。

 

当线程处于冻结状态,就不会读取到标记,那么线程就不会结束。

interrupt清除线程的冻结状态

当没有指定的方式让冻结的线程恢复到运行状态时,这时需要对冻结状态进行清除

强制让线程恢复到运行状态中来。这样就可以操作标记让线程结束。




---------------------- android培训、java培训、期待与您交流!

----------------------详细请查看:http://edu.csdn.net/heima

原创粉丝点击