|
线程有五个状态:1.新生状态:new出来到start之前
2.就绪状态:调用了start之后进入就绪状态
(注意:线程只能使用start启动而不能用run方法,对于使用接口方法创建线程来说 不能直接start 所以使用寄生的方法)
3.运行状态:在就绪状态下获得了CPU分配的资源
4.阻塞状态:在运行的时候调用的sleep方法 这时进入阻塞状态 在结束睡眠后 进入就绪状态
5.死亡状态:在线程运行完run方法后 进入死亡状态
线程相关的方法:
setPriority(int newPriority) 更改线程的优先级
(注:优先级1-10,从理论上说优先级高更有机会获得资源 但是从理论上 不一定可以 和线程的礼让:yield 相似)
static void sleep(long millis) 在指定的毫秒数内让当前正在执行的线程休眠
void join() 阻击:等待该线程终止其他线程才运行
static void yield() 暂停当前正在执行的线程对象,并执行其他线程
void interrupt() 中断线程
boolean isAlive() 测试线程是否处于活动状态
Tread.sleep(time) 让线程睡眠 time是时间 单位是毫秒
线程安全:
加锁 synchronized
可以加到方法上面 也可以加到代码块中 加到代码块中效率更高
synchronized (obj) {
if(count>0){
number++;
count--;
System.out.println(String.format("%s 买到 %d 号票,剩余 %d 张票",Thread.currentThread().getName(), number, count));
}
}
线程安全相关类:
StringBuffer Hashtable 线程安全
StringBuilder Arraylist HashMap线程不安全
|
|