java线程并发-Thread类的使用

学习资源:http://www.cnblogs.com/dolphin0520/p/3920357.html

一.线程的状态

  创建(new)、就绪(runnable)、运行(running)、阻塞(blocked)、消亡(dead)

二.上下文切换

  对于单核CPU来说(对于多核CPU,此处就理解为一个核),CPU在一个时刻只能运行一个线程,当在运行一个线程的过程中转去运行另外一个线程,这个叫做线程上下文切换(对于进程也是类似)。

  存储和恢复CPU状态的过程,它使得线程执行能够从中断点恢复执行。

  线程上下文切换过程中会记录程序计数器、CPU寄存器状态等数据。

三.Thread类中的方法

  Thread类实现了Runnable接口

  1)start方法

  start()用来启动一个线程,当调用start方法后,系统才会开启一个新的线程来执行用户定义的子任务,在这个过程中,会为相应的线程分配需要的资源。

 

  2)run方法

  run()方法是不需要用户来调用的,当通过start方法启动一个线程之后,当线程获得了CPU执行时间,便进入run方法体去执行具体的任务。注意,继承Thread类必须重写run方法,在run方法中定义具体要执行的任务。

 

  3)sleep方法

  sleep相当于让线程睡眠,交出CPU,让CPU去执行其他的任务。sleep方法不会释放锁,也就是说如果当前线程持有对某个对象的锁,则即使调用sleep方法,其他线程也无法访问这个对象。

  调用了sleep方法,必须捕获InterruptedException异常或者将该异常向上层抛出

  sleep方法有两个重载版本:

  sleep( long  millis)      //参数为毫秒
   sleep( long  millis, int  nanoseconds)     //第一参数为毫秒,第二个参数为纳秒
 

  4)yield方法

  调用yield方法会让当前线程交出CPU权限,让CPU去执行其他的线程。它跟sleep方法类似,同样不会释放锁。但是yield不能控制具体的交出CPU的时间,另外,yield方法只能让拥有相同优先级的线程有获取CPU执行时间的机会

  注意,调用yield方法并不会让线程进入阻塞状态,而是让线程重回就绪状态,它只需要等待重新获取CPU执行时间,这一点是和sleep方法不一样的。

 

  5) wait方法

  wait方法会让线程进入阻塞状态,并且会释放线程占有的锁,并交出CPU执行权限。

 

  6)join方法

  源码中实际上调用的是wait()方法,会让线程释放对一个对象持有的锁

  join方法有三个重载版本:

  join()

  join(long millis)     //参数为毫秒

  join( long  millis, int  nanoseconds)     //第一参数为毫秒,第二个参数为纳秒
 

  7)interrupt方法

  interrupt,顾名思义,即中断的意思。单独调用interrupt方法可以使得处于阻塞状态的线程抛出一个异常,也就说,它可以用来中断一个正处于阻塞状态的线程;另外,通过interrupt方法和isInterrupted()方法来停止正在运行的线程。

 

 

转载于:https://www.cnblogs.com/Rage-Leila/p/8567784.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值