java 多线程 入门 线程生命周期图

javase学习中,一个重要的部分是多线程。而在学习多线程时,先来理解下,什么是多线程。

一、什么是多线程
所谓多线程是,同时对多个任务加以控制和处理。它并不是为了提高运行效率,而是为了提高资源使用效率来提高系统效率。线程是在同一时间段内(时间很小毫秒微秒小到你感觉不到时间差异),需要处理多项任务的时候实现。

1. 线程可以把占据长时间的程序操作任务放在后台处理。

2. 用户界面可以更加吸引人,程序需要时间处理时,弄一个进度条。

3. 在一些需要待任务的操作,比如实现用户输入、文件读写等方面,释放掉一些珍贵的资源比如内存等。

二、 java中 线程的生命周期:

1. 首先通过继承Thread或实现Runnable,然后new Thread(r)[实现Runnable时需要将对象传入Thread类构造方法中],再通过Thread的start()方法开启一个线程。

2. 线程一旦被start后,将进入预运行(注意是可运行,而不是运行状态中)状态(等待线程排班器排序)。

3. 当此线程争夺到CPU资源时被排班器推上Running,这才是运行状态中。

4. 而运行状态中,可以有两种情况,一种是run方法代码 执行完毕 那么此线程就直接挂了 Dead状态了。(当然也可以是通过System.exit(0)退出).

另一种情况是线程由运行状态,进入了阻塞或叫冻结状态。运行状态中,还可以调用yield方法,礼让其它线程先执行。相当于sleep方法但时间不可控(同样不会释放锁资源)

5. 线程由运行进入阻塞状态发生的条件可以有:

5.1 Thread类中的sleep方法。

5.2 Object类中的wait方法。

5.3 等待用户输入输出。

5.4 尝试取得对象锁定。

6. 线程进入阻塞状态后,若想于进入运行,那么必须先进入Runnable预运行中。而进入预运行中,又需要达到如下条件:

6.1 sleep方法中时间到了。

6.2 wait时,至少一线程调用了notify或notifyall。

6.3 用户输入输出完成。

6.4 已取得对象锁定。

7. 进入可运行的Runnable状态后,又进入第3点循环状态。一直到线程结束终结。

注意: wait与sleep的区别

1. wait方法是Object类提供的,而sleep方法是Thread类提供的。

2. wait方法必须在同步锁中使用,且wait后,线程释放了CPU资源与锁资源。而sleep方法,没有限定必须在同步锁中使用。且sleep后,只会释放CPU资源。而不会释放同步锁资源。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值