java.lang.Thread 线程类
方法
String getName()获取线程名称
static Thread currentThread()获取当前线程对象
void setName(String name)设置线程名称,注意主线程的名称不能设置
static void sleep(long millis)休眠
getPriority()得到当前线程的优先级
setPriority()设置当前对象的优先级 //默认是5
开启新线程
A:继承Thread(),重写线程体run(),调用start()方法
B:定义一个实现类实现Runnable接口
重写线程任务
创建实现类对象
创建线程对象Thread(Runnable r)
start()
B方法的好处
避免了单继承的局限性
降低了耦合性(创建线程对象和线程任务分开)
(必须保证锁对象的唯一性 A:只创建一个对象;B:用static)
线程安全隐患:当多个线程同时操作一个数据时容易产生错误
线程同步 (原理:有锁的线程执行,没锁的线程等待)
1:同步代码块
synchronized(任意对象){
可能出现问题的代码
}
2:同步方法
在方法的访问权限修饰符后 返回值类型之前添加一个关键字synchronized
同步方法的锁是this,当前对象
静态同步方法的锁是:类名.class (static优先于对象存在,所以里面不会有this)
因为锁可以是任意对象,所以这两个方法封装到Object中
wait():当前线程进行等待(一定要有其它线程叫醒它才会继续执行)
notify():唤醒其它线程
线程状态
A:新建 NEW
B:运行 RUNNABLE
C:受阻塞 BLOCKED //可以执行,但是cpu资源不够分配
D:睡眠 TIMED WAITING //自己放弃执行的资格,同时自己醒
E:等待 WAITING //自己陷入等待,别人叫醒
F:消亡 TERMINATED