java入门基础学习----线程的状态和终止线程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Miracle_Gaaral/article/details/86773112

一.线程的状态

1.新生状态;    2.就绪状态;    3.运行状态;    4.阻塞状态;    5.死亡状态

二.停止线程

1.自然终止:线程体正常执行完毕

2.外部干涉:

      1).线程类中,定义线程体使用的标识

      2).线程体使用该标识

      3).对外提供的方法改变该标识

      4).外部根据条件调用该方法即可

三.阻塞

1.join: 合并线程

package com.kennosaur.state;

/**
 * join:合并线程
 * @author Administrator
 *
 */
public class Join extends Thread{

	public static void main(String[] args) throws InterruptedException {
		Join demo = new Join();
		Thread thread = new Thread(demo);  //新生
		thread.start();  //就绪
		//cpu调度进入运行
		
		for (int i = 0; i < 100; i++) {
			if (50==i) {
				thread.join();  //main阻塞
			}
			System.out.println("main..."+i);
		}
	}

	@Override
	public void run() {
		for (int i = 0; i < 1000; i++) {
			System.out.println("join..."+i);
		}
	}
	

}

2.yield:暂停线程    static静态方法

3.sleep:休眠, 不释放锁

      a.与实践相关: 倒计时

      b.模拟网络延时

package com.kennosaur.state;

/**
 * sleep模拟网络延时
 * @author Administrator
 *
 */
public class Sleep02 {

	public static void main(String[] args) {
		//真实角色
		Web12306 web = new Web12306();
		//代理
		Thread t1 = new Thread(web, "路人甲");
		Thread t2 = new Thread(web, "路人乙");
		Thread t3 = new Thread(web, "攻城狮");
		//启动线程
		t1.start();
		t2.start();
		t3.start();

	}

}

class Web12306 implements Runnable{
	private int num=50;
	@Override
	public void run() {
		while (true) {
			if (num<=0) {
				break; //跳出循环
			}
			try {
				Thread.sleep(500);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println(Thread.currentThread().getName()+"抢到了"+num--);
		}
	}
	

}

输出结果:

    ......
    路人乙抢到了1
    攻城狮抢到了0
    路人甲抢到了-1

后面两个线程执行,是由于并发带来的问题,造成资源分配冲突

猜你喜欢

转载自blog.csdn.net/Miracle_Gaaral/article/details/86773112