class Test implements Runnable{
int num=100;
Object object=new Object();
@Override
public void run() {
while (num>0){
synchronized (object){
System.out.println(Thread.currentThread().getName()+" "+num--);
}
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class Thraed1 {
public static void main(String args[]) {
Test t = new Test();
Thread thread = new Thread(t);
Thread thread1 = new Thread(t);
thread.start();
thread1.start();
}
}
运行状态:获取到cpu的执行权,但运行状态可以向(就绪,阻塞,死亡)状态转换 a .向就绪状态转换:如果该线程失去了cpu资源,就会又从运行状态变为就绪状态。重新等待系统分配资源。也可以对在运行状态的线程调用yield()方法,它就会让出cpu资源,再次变为就绪状态。 b . 向阻塞态转换: ①、线程调用sleep方法主动放弃所占用的系统资源 ②、线程调用一个阻塞式IO方法,在该方法返回之前,该线程被阻塞 ③、线程试图获得一个同步监视器,但更改同步监视器正被其他线程所持有 ④、线程在等待某个通知(notify) ⑤、程序调用了线程的suspend方法将线程挂起。不过该方法容易导致死锁,所以程序应该尽量避免使用该方法。 c. 向死亡状态转换:当线程的run()方法执行完,或者被强制性地终止,例如出现异常,或者调用了stop()、desyory()方法等等,就会从运行状态转变为死亡状态。