java基础(statue---线程状态和常用方法)

1.线程状态:

(1)创建(new)状态: 准备好了一个多线程的对象,即执行了new Thread(); 创建完成后就需要为线程分配内存
(2)就绪(runnable)状态: 调用了start()方法, 等待CPU进行调度
(3)阻塞(blocked)状态: 暂时停止执行线程,将线程挂起(sleep()、wait()、join()、没有获取到锁都会使线程阻塞), 可能将资源交给其它线程使用
(4)死亡(terminated)状态: 线程销毁(正常执行完毕、发生异常或者被打断interrupt()都会导致线程终止
(5)运行(running)状态: 执行了run()方法的线程

2.线程常用方法

(1)获取线程各种参数

   currentThread( ):获取当前执行的线程;

   getName( ):获取线程名字;

   getId( ):获取线程id;

   isAlive():判断线程是否存活,线程处于正在运行,获取准备开始运行的状态,就认为是存活状态

   getPriority( ):获取线程优先级

   isDaemon( ):查看是否是守护线程

关键词解释:守护线程,是指在程序运行时 在后台提供一种通用服务的线程,这种线程并不属于程序中不可或缺的部分。通俗点讲,任何一个守护线程都是整个JVM中所有非守护线程的"保姆"。只有到JVM中还有非守护线程时,守护线程就不会结束,反之则结束。例如垃圾回收器就是守护线程

(2)start()和run()

   start( ):启动并发编程,通过cpu的轮转调度来启动线程·,实现多线程。

   run( ):启动顺序编程,只启动调用run方法的主线程

(3)sleep() 与 interrupt()

    sleep( ):睡眠指定时间,释放cpu的执行权,但是不会释放锁,所以一旦时间到了就会立即执行。由运行状态转变为阻塞状态

    interrupt( ):唤醒正在睡眠的程序,调用interrupt()方法,会使得sleep()方法InterruptedException异常,当sleep()方法抛出异常就中断了sleep的方法,从而让程序继续运行下去,由阻塞状态变为运行状态

(4)wait() 与 notify()   {同步代码块内部方法}

    wait( ):等待指定时间,释放cpu,释放锁。时间到了之后就会进入就绪状态重新获取锁

    notify():唤醒由wait暂停执行的线程,但不会立即执行,而是使其从等待队列进入就绪状态重新获取锁

    notifyAll(): 唤醒所有的wait对象

(5)sleep()与 wait()

sleep()方法是Thread中的一个静态方法,用于使当前线程暂停执行一段时间。它接受一个以毫秒为单位的时间参数,并且可以抛出InterruptedException异常。当调用sleep()方法时,当前线程会进入阻塞状态,并释放CPU资源,让其他线程有机会执行。经过指定的时间后,线程会被唤醒,继续执行。

wait()方法是Object中的一个实例方法,用于使当前线程进入等待状态,直到其他线程调用该对象的notify()notifyAll()方法唤醒它,或者等待一定时间后自动唤醒。在调用wait()方法之前,必须先获得对象的锁(即在synchronized块中调用)。当调用wait()方法时,当前线程会释放对象的锁,并进入等待状态,同时让出CPU资源,让其他线程有机会执行。

总结:sleep属于Thread类静态方法,不会释放锁。sleep使用interrupt()来唤醒

          wait属于Object类实例方法,只能在synchronized中使用,会释放锁,调用wait之前也要获取锁,sleep使用interrupt()来唤醒

(6)join()

  让调用join方法的当前线程加入主线程,然后父线程会一直wait,直到子线程执行完毕,一般用在前置线程上。

    

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值