线程的几个状态切换图:
创建状态:new一个线程对象
就绪状态:创建状态调用start的时候,就是就绪状态,随时可以进入运行状态
运行状态:到达就绪状态状态后,各个线程抢占资源,然后进入到运行状态
阻塞状态:从运行状态到达阻塞状态一般分为:(不能直接从阻塞状态直接到运行状态)
1.thread.wait(),就是进入到阻塞状态,用thread.notify()需要手动唤醒从阻塞状态到就绪状态,
2.thread.sleep()时间到了自动唤醒进入到就绪状态
3.thread.join()就是阻塞其他线程先执行本线程,执行完后其他线程进入就绪状态.
还有一点,可以从运行状态进入到就绪状态:
使用的thread.yield();就是线程完成后,然后释放资源,让线程们再去抢夺资源,进入运行状态.
一般来说这些状态都能直接进入终止状态.
/**
-
应用Java中线程的概念,编写一个Java程序(包括一个主程序类,一个Thread类的子类)。
-
在主程序中创建2个线程(用子类),将其中一个线程的优先级设为10,另一个线程的优先级设为6。
-
让优先级为10的线程打印200次“线程1正在运行”,优先级为6的线程打印200次“线程2正在运行”。
-
@author dch
*ring
*/
public class Test2_2 {public static void main(String[] args) throws Exception {
//创建两个线程对象,进入创建状态 thread t1 = new Test2_2().new thread("线程1正在运行"); thread t2 = new Test2_2().new thread("线程2正在运行"); //设置线程1的优先级为10 t1.setPriority(10); //设置线程2的优先级为6 t2.setPriority(6); //线程1进入就绪状态 t1.start(); //如果想让线程1先运行完200次,再让线程2去运行. //用join方法,但是要放在在线程进入就绪状态前 t1.join(); //线程2进入就绪状态 t2.start();
}
//一个线程类继承Thread
class thread extends Thread{
//线程名
private String name;
//无参构造器
/*public thread(){}*/ //有参构造器 public thread(String name){ super(name);//这里才能显示变量的内容 //this.name = name; } //重写run方法 public void run(){ for (int i = 0; i < 200; i++) { System.out.println(this.getName()+"-------"+i); } } }
}