【笔记】线程学习笔记
前言
线程学习笔记
创建线程
继承Thread
- 定义Thread的子类
- 重写run()方法
- 在run()方法中的代码,是与其他代码并行执行的代码
- 线程启动后,自动执行run()方法
1 | package io.github.feiju12138; |
实现Runnable
- 定义Runnable子类
- 实现run()方法
- 把Runnable对象放入Thread线程对象启动
- 线程启动后,执行Runnable对象的run()方法
1 | package io.github.feiju12138; |
线程的方法
获得线程对象
- 获得正在执行这行代码的线程对象
1 | Thread.currentThread(); |
获得线程名
1 | getName(); |
设置线程名
1 | setName(); |
暂停线程
<sun>
:当前线程暂停指定的毫秒值
1 | Thread.sleep(<num>); |
打断一个线程的暂停状态
- 被打断的线程出现InterruptedException异常
1 | iterrupt(); |
当前线程,等待被调用的线程结束
- 一个线程调用另一个线程,等待另一个线程执行结束,再继续执行
1 | join(); |
让步,当前线程放弃时间片,让出cpu资源
1 | Thread.yield() |
优先级
- 优先级1~10,默认为5
1 | getPriority() |
后台线程
- 守护线程
1 | setDeamon(true) |
多线程的数据访问冲突
- 多个线程,共享访问数据
- 一个线程访问到修改的一半的数据,成为脏数据
线程同步
- 同步:多个线程,步调一致地执行
- 让多个线程,争夺同一个对象的“同步锁”,谁抢到谁执行,抢不到要等待
- 同步锁
- 任何对象,都有唯一的同步锁
- 遇到同步关键字(
synchronized
),要先抢到锁才能执行,抢不到要等待
同步代码块
- 抢指定对象的锁
<obj>
:指定对象
1 | synchronized(<obj>) { |
在方法上加锁
- 抢当前对象的锁
1 | synchronized void func() { |
静态同步代码块
- 抢类的锁
1 | static synchronized void func() { |