黑马程序员--基础复习2012.8.14 多线程
来源:互联网 发布:用jquery遍历数组 编辑:程序博客网 时间:2024/06/06 11:00
进程:一个正在执行中的程序。
每个进程执行都有一个执行顺序。该顺序是一个执行路径,或者叫一个控制单元
线程:进程中的一个独立的控制单元,线程控制着进程的执行。
一个进程中至少有一个线程。
创建线程的第一种方式
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
- 黑马程序员--基础复习2012.8.14 多线程
- 黑马程序员_java基础复习五多线程
- 黑马程序员——java基础 多线程(复习)
- 黑马程序员—java基础复习—多线程
- 黑马程序员--基础复习2012.8.2
- 黑马程序员--基础复习2012.8.3
- 黑马程序员--基础复习2012.8.4
- 黑马程序员--基础复习2012.8.5
- 黑马程序员--基础复习2012.8.6
- 黑马程序员_Java基础复习
- 黑马程序员------多线程基础
- 黑马程序员-基础-多线程
- 黑马程序员--多线程基础
- 黑马程序员_java基础复习一基础
- 黑马程序员--基础复习2012.8.7 交通灯管理系统
- 黑马程序员--基础复习2012.8.8 银行调度系统
- 黑马程序员 Java基础 --->多线程
- 黑马程序员--java基础多线程
- 怎样把驱动加载到内核
- C# 装箱和拆箱
- MyEclipse快捷键及经验总结
- 正则表达式使用注意事项
- 几种session存储方式比较
- 黑马程序员--基础复习2012.8.14 多线程
- 季卫东:中国互联网企业平均寿命只有三到五年
- http常用状态码
- 关于数组的一些问题
- wxPython: 简单的绘图例子
- How to collect stats of apps from CloudFoundry and do analysis?
- DREAMWERVER CS5序列号反复验证 解决方法
- vim删除 整片文档
- 平静中的激情,程序员的生活