本文共 2057 字,大约阅读时间需要 6 分钟。
初始状态 ==》 创建线程对象 可运行状态 ==》 调用start方法 运行状态 ==》 os分配cpu时间片 终止状态 ==》 run方法退出 阻塞状态 ==》 1.等待数据输入(1.用户输入2.接收网上数据3.接收文件中数据 等等) 2.sleep方法 3.join方法
线程的四种状态 ==>五种状态初始状态 线程对象创建好,还没有调用start方法。可运行状态(万事俱备,只欠cpu) 调用start方法 cpu时间片到期由运行状态回到可运行状态运行状态 拿到cpu(时间片),执行代码 (操作系统负责选中一个线程由可运行状态进入运行状态)终止状态 (一般的线程)run方法退出 (主线程是main方法退出)阻塞状态 什么情况下线程会进入阻塞状态 等待数据输入不同的操作系统有不同的线程调度策略,意思是os针对不同的线程有不同的线程运行状态。比如windows系统针对线程的运行状态是随机选中的。进程中所有线程都结束==>进程(程序宣布结束)。join方法 t2线程对t1线程调用join方法 条件不满足t2时,t2阻塞,调用t1。t2对t1调用join,t2阻塞。当t1进行终止状态,t2进入可运行状态。
上代码
public class TestThread { public static void main(String[] args) { /* Thread thread = new Thread(); //创建一个线程对象 thread.start(); //对线程对象调用start方法 创建线程(让线程启动) //os操作系统中创建线程// thread.stop(); //线程停下来*/ ThreadA threadA = new ThreadA();// threadA.start(); //调用start方法创建线程// threadA.run(); //错误// ThreadB threadB = new ThreadB(); Runnable target=new ThreadB(threadA); Thread threadB = new Thread(target); threadA.start(); //调用start方法创建线程 threadB.start(); }}class ThreadA extends Thread{ @Override public void run() { for (int i = 0; i <=100 ; i++) { System.out.println("$$$"+i);// try {// Thread.sleep(100);// } catch (InterruptedException e) {// e.printStackTrace();// } } }}class ThreadB implements Runnable{ private Thread t; public ThreadB(Thread t){ this.t=t; } @Override public void run() { for (int i = 0; i <=100 ; i++) { System.out.println("###"+i); try { if(i==50) t.join(); } catch (InterruptedException e) { e.printStackTrace(); } }// try {// Thread.sleep(80);// } catch (InterruptedException e) {// e.printStackTrace();// } } }
执行结果 当t2执行到50时,执行t1
这辈子坚持与不坚持都不可怕,怕的是独自走在坚持的道路上! 欢迎加入技术群聊
。
转载地址:http://ckoai.baihongyu.com/