多线程__【Thread类的方法--线程的调度与控制】
线程的调度与控制
start()启动线程进入可运行状态(Runnable)
stop()停止线程进入消亡状态(Dead) //已过时,5.0以后不再支持
sleep()线程睡眠进入冻结状态(Blocked)
wait()
interrupt()停止线程(的冻结状态)
多线程通常使用循环结构,只要控制住循环就能使run()方法结束,从而结束线程
当线程处于冻结状态就读取不到标记;wait() join() sleep()都会导致冻结状态;不结束冻结状态程序就不能停止
当没有指定方式(notify,signal等)使线程恢复到运行状态时。就需要对冻结状态进行清除
interrupt()清除线程的中断(冻结)状态,强制恢复到运行状态,使其操作标记继续执行到自然结束,而不是停止状态(stop)
会抛出interruptedException如果任何线程interrupt了当前线程,抛出该异常时,当前线程的中断(冻结)状态被清除
用法:
由于是Thread类的方法,所以可以使用线程对象直接调用:t1.interrupt()
interrup()中断线程 不是直接消亡,而是将处于冻结状态的线程强制恢复到运行状态,使其操作标记自然结束,这点跟stop有本质的区别
会抛出InterruptedException异常
守护线程
setDaemon(boolean b);参数为boolea类型
将该线程标记为守护线程,当正在运行的线程都是守护线程时,虚拟机退出必须要在启动线程前调用。
join()
临时加入线程 ;抢夺CPU执行权,执行完毕后才轮到其他线程,,,插队
当A线程执行到了B线程的join()方法时,A就会等待,等B线程执行完A才会执行
会抛出InterruptedException
toString()
覆盖了Object中的toString方法,返回线程的字符串表现形式,包括:名称;优先级;线程组
Thread.currentThread().toString()
setPriority()
更改线程的优先级;
用法:t1.set Priority(Thread.MAX_PRIORITY);设置该线程为最高优先级10
public static final int MAX_PRIORITY ; int类型的静态常量
MAX=10;MIN=1;NORM=5;
yield()
释放执行权,使线程恢复到初始化状态,减少线程连续执行的频率,使线程交替执行
多线程的使用场景:
当某些代码需要被同时执行时,为了打破单线程的局限性,就可以使用多线程
示例
class ThreadDemo { public static void main(String[] args) { new Thread()//匿名内部类 { public void run() { for (int x=0;x<100 ;x++ ) { System.out.println(Thread.currentThread().getName()+"..."+x); } } }.start(); Runnable r = new Runnable()//匿名内部类 { public void run() { for (int x=0;x<100 ;x++ ) { System.out.println(Thread.currentThread().getName()+"..."+x); } } };//要加标点,因为这是一个匿名对象 new Thread(r).start();//再次使用匿名 for (int x=0;x<100 ;x++ ) { System.out.println(Thread.currentThread().getName()+"..."+x); } } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步