三.线程状态:
新生状态:用new关键字或者Thread类或者子类建立一个线程对象
就绪状态:start方法进入
运行状态:run方法
阻塞状态:让出CPU暂时停止自己的状态
死亡状态:一个是正常运行的线程完成它的全部工作,另一个强制终止(stop或destroy),不推荐
四.停止线程(重点):
1 自然终止,线程正常执行完毕
2 外部干涉
1) 线程类中定义线程体使用的标识
2) 线程体使用该标识
3) 提供对外的方法改变该标识
4) 外部根据条件调用该方法
package thread.status;
public class stop {
public static void main(String[] args) {
Study s = new Study();
new Thread(s).start();
// 外部干涉
for (int i = 0; i < 1000; i++) {
if (i == 500) {
s.stop();
}
System.out.println("main....-->" + i);
}
}
}
class Study implements Runnable {
// 1)线程中定义线程体使用的标识
private boolean flag = true;
@Override
public void run() {
// 2)线程体使用该标识
while (flag) {
System.out.println("studythread...");
}
}
// 3)对外提供方法改变标识
public void stop() {
this.flag = false;
}
}
五.线程阻塞
1 join:合并线程
package thread.status;
/**
* join合并线程
*
* @author Administrator
*
*/
public class JoinDemo1 extends Thread {
public static void main(String[] args) throws InterruptedException {
JoinDemo1 demo = new JoinDemo1();
Thread t = new Thread(demo);// 新生
t.start();// 就绪
// cpu调度运行
for (int i = 0; i < 1000; i++) {
if (i == 50) {
t.join();// main方法阻塞
}
System.out.println("main...." + i);
}
}
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println("join....." + i);
}
}
}
2 yield:暂停当前正在执行的线程,并执行其他线程。 static
package thread.status;
public class yieldDemo1 extends Thread {
public static void main(String[] args) throws InterruptedException {
yieldDemo1 demo = new yieldDemo1();
Thread t = new Thread(demo);// 新生
t.start();// 就绪
// cpu调度运行
for (int i = 0; i < 1000; i++) {
if (i % 5 == 0) {
// 暂停本线程main
Thread.yield();
}
System.out.println("main...." + i);
}
}
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
System.out.println("join....." + i);
}
}
}
3 sleep:休眠,暂停当前线程,不释放锁
1) 与时间相关:倒计时
2) 模拟网络延时
package thread.status;
/**
* 倒数十个数,一秒内打印一个
*
* @author Administrator
*
*/
public class SleepDemo1 {
public static void main(String[] args) throws InterruptedException {
int num = 10;
while (true) {
System.out.println(num--);
Thread.sleep(1000);// 暂停
if (num <= 0) {
break;
}
}
}
}