黑马程序员技术交流社区
标题:
java基础线程的学习总结
[打印本页]
作者:
NewBeeCoder
时间:
2016-9-4 11:21
标题:
java基础线程的学习总结
概念:
进程:正在运行的程序
线程:程序的执行路径
一个进程中有一个或多个线程,CPU执行程序 以线程为单位.
线程的调度方法:
java采用的是抢占式线程调度方式.
CPU超高速运行,HZ 每秒脉冲数,频率. 1GHz 10亿赫兹
创建线程的方式(需要掌握)
方式1,继承Thread线程类
步骤
1,自定义类继承Thread类
2,在自定义类中重写Thread类的run方法
3,创建自定义类对象(线程对象)
4,调用start方法,启动线程,通过JVM,调用线程中的run方法
方式2,实现Runnable接口
步骤
1,创建线程任务类 实现Runnable接口
2,在线程任务类中 重写接口中的run方法
3,创建线程任务类对象
4,创建线程对象,把线程任务类对象作为Thread类构造方法的参数使用
5,调用start方法,启动线程,通过JVM,调用线程任务类中的run方法
这两种方式 那个更好
第二种
将线程执行任务(目标)和线程对象本身进行分离
方便数据共享
突破了单继承局限性
多个线程 可以 做同一个任务 线程安全问题 共享数据的安全问题
出现的前提:(抢占式操作带来的安全问题)
多个线程
多个线程有共享数据
多个线程操作共享数据
处理方式: 加锁 (使用同步代码块的方式处理卖票的安全问题)
同步代码块:多个线程必须使用同一把锁
synchronized (锁对象){
可能出现问题的代码;
}
同步方法: 将可能出现安全问题的代码 放到一个方法中 这个方法被synchronized修饰
public synchronized void 方法名(){
可能出现问题的代码;
}
锁对象this
静态的同步方法: 锁对象 类名.class
public static synchronized void 方法名(){
可能出现问题的代码;
}
JDK1.5之后 Lock 接口 表示锁
lock() 加锁
unlock() 解锁
Thread
静态
static void sleep(long time) 休眠多长时间 属于阻塞状态 放弃了CPU执行资格 放弃CPU执行权
static Thread currentThread() 获取正在运行的线程对象
非静态
setName(String name) 给线程设置名字
getName() 获取线程名字
start() 开启线程
跟线程相关的三个方法 定义在Object中
wait() 让当前正在执行的线程 等待 进入阻塞状态 放弃了CPU执行资格 放弃CPU执行权
notify() 让在等待的线程 唤醒 唤醒一个 随机
notifyAll() 将所有的等待线程 唤醒
这三个方法 是锁对象调用
线程中通信
等待唤醒机制 (了解)
线程中的几个状态
创建状态 刚创建 线程
就绪状态 线程具备了执行资格 而没有执行权
阻塞状态 线程没有执行资格 也没有执行权
运行状态 线程有执行资格 有执行权
消亡状态 挂掉了,等待收尸
作者:
zjy9399
时间:
2016-9-17 14:22
不错,学习了
作者:
hgd5201314
时间:
2016-9-17 17:10
非常棒的帖子
作者:
赵晗
时间:
2016-9-17 18:16
学习学习学习
作者:
yewenning12
时间:
2016-9-17 21:32
学到了很多
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2