zoukankan      html  css  js  c++  java
  • 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()方法来停止正在运行的线程。

     
  • 相关阅读:
    [Chapter 3 Process]Practice 3.4 Describe what happens when a context switch occurs if the new context is already loaded into one of the register sets.
    [Chapter 3 Process]Practice 3.3 Discuss three major complications that concurrent processing adds to an operating system.
    爬取:中国大学排名
    基础统计学--复习
    pandas之数据结构
    numpy之初探排序和集合运算
    numpy之统计函数和布尔数组方法
    numpy之meshgrid和where
    numpy之通用函数ufunc
    numpy之转置(transpose)和轴对换
  • 原文地址:https://www.cnblogs.com/Rage-Leila/p/8567784.html
Copyright © 2011-2022 走看看