黑马程序员-----java基础(多线程)
来源:互联网 发布:linux查看目录 编辑:程序博客网 时间:2024/05/29 12:38
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
多线程
指应用程序有多条执行路径
进程:正在运行的应用程序
线程:一个进程的执行路径
如何实现多线程程序由于线程依赖于进程存在,而进程是操作系统创建的,并在java是不能直接调用系统的功能,为了方便对多线程提供了线程API的对应类。
线程类 Thread
创建线程的方式有两种;
方式1:继承Thread类,
1定义一个类继承Thread类
2子类要重写Thread类的run()方法
3让线程启动并执行。 不能使用run方法,必须用start方法
Start方法作用:
1让线程启动
2调用run方法
线程和进程的联系
1进程包含多个线程
2进程一定至少包含一个线程
为什么使用线程,以及什么时候使用。
为了提高效率才使用,只有当擦做代码内容比较多,循环次数较多,这样的情况才使用。
程序的执行,是在抢占CPU资源,CPU是在多个程序间做高效切换。CPU再同一时刻,只能
处理一个程序。
方式2:
1创建一个类,实现Runnable接口
2重写run方法
3创建类的实例
4把类的实现作为Thread的构造参数传递,创建Thread对象。
既然有了继承Thread类方法,为什么还有实现Runnable接口方式呢?
1避免了单继承的局限性
2实现接口方式,只创建了一个资源对象,更好的实现了数据,操作的分离
一般选择第二种方式。
线程的生命周期
1 新建
2 就绪
3 运行
4 阻塞
5 死亡
线程安全问题
:为什么有问题
1:有共享数据
2:共享数据被多条语句操作
3:在多线程环境中
解决方案
1:同步代码块
synchronized(锁对象)
{
被同步的代码
}
1:同步方法
把synchronized加在方法上。
死锁
当同步中嵌套同步时,就有可能出现死锁现象。
public class DieLock extends Thread {private boolean flag;public DieLock(boolean flag) {this.flag = flag;}@Overridepublic void run() {if (flag) {synchronized (MyLock.objA) { System.out.println("true -- objA");synchronized (MyLock.objB) {System.out.println("true -- objB");}}} else {synchronized (MyLock.objB) {System.out.println("false -- objB");synchronized (MyLock.objA) {System.out.println("false -- objA");}}}} }
线程间通信
其实就是多个线程在操作同一个资源,但是操作的动作不同。
1)wait(),notify(),notifyAll(),用来操作线程为什么定义在了Object类中?
1,这些方法存在与同步中。
2,使用这些方法时必须要标识所属的同步的锁。同一个锁上wait的线程,只可以被同一个锁上的notify唤醒。
3,锁可以是任意对象,所以任意对象调用的方法一定定义Object类中。
wait(),sleep()有什么区别?
wait():释放cpu执行权,释放锁。
sleep():释放cpu执行权,不释放锁。
setDaemo方法
设置守护线程,一旦主线程结束,守护线程就结束。
join方法
当A线程执行到了b线程的.join()方法时,A线程就会等待,等B线程都执行完,A线程才会执行。(此时B和其他线程交替运行。)join可以用来临时加入线程执行。
setPriority()方法用来设置优先级
MAX_PRIORITY 最高优先级10
MIN_PRIORITY 最低优先级1
NORM_PRIORITY 分配给线程的默认优先级
yield()方法可以暂停当前线程,让其他线程执行。
- 黑马程序员---JAVA基础---多线程(八)
- 黑马程序员 JAVA基础 - 多线程(一)
- 黑马程序员 JAVA基础--多线程(二)
- Java基础---多线程 (黑马程序员)
- 黑马程序员--Java基础--多线程(一)
- 黑马程序员--Java基础--多线程(二)
- 黑马程序员-----java基础(多线程)
- 黑马程序员---Java基础(多线程)
- 黑马程序员-java基础(五)-多线程
- 黑马程序员 Java基础 --->多线程
- 黑马程序员--java基础多线程
- 黑马程序员JAVA基础-多线程
- 黑马程序员---java基础多线程
- 黑马程序员--java基础--多线程
- 黑马程序员--Java基础--多线程
- 黑马程序员-----java基础 多线程
- 黑马程序员-->Java基础-->多线程
- 黑马程序员-------java基础------多线程
- SurfaceView和view分别实现触摸轨迹
- 喷水装置 ACM题目 京东16招聘编程题(贪心算法)
- javascript得到浏览的可用高度
- 秒杀多线程第三篇 原子操作 Interlocked系列函数
- redis使用(二):五种键值类型
- 黑马程序员-----java基础(多线程)
- Android进阶之数据存储+Preferences
- opencv7-ml之统计模型
- 二维数组中行最大值中的最小值
- 动态选路协议
- CoCreateInstance of OLE control failed
- Swift学习笔记2——基本类型和基本运算
- 搜狗16招聘机试题 加密解密算法
- Js-函数回调