美文网首页
Java多线程(2)--线程周期、线程同步

Java多线程(2)--线程周期、线程同步

作者: Kylin824 | 来源:发表于2017-12-08 10:44 被阅读0次

线程的生命周期:(新建、就绪、运行、阻塞、死亡)

  1. 新建状态:使用new关键字创建一个线程对象后既处于新建状态,由虚拟机为其分配内存,并初始化其成员变量的值,线程执行体未执行

  2. 就绪状态:线程对象调用start()方法后处于就绪状态,由虚拟机为其创建方法调用栈和程序计数器,等待JVM里的调度器决定其何时开始运行

  3. 运行状态:若处于就绪状态的线程获得CPU,则开始执行run()方法的线程执行体,处于运行状态,直到系统分配的时间段用完则中断,运行其他线程

  4. 阻塞状态:对于抢占式,当失去处理器资源时则进入阻塞状态,或者由线程调用sleep()方法主动进入阻塞状态,被阻塞的线程解除阻塞后,重新进入就绪状态

  5. 死亡状态:线程的run()或call()执行完成,则线程结束,或线程抛出异常,或直接调用stop()方法结束线程(不推荐)

线程的生命周期

控制线程

  • join:

    Thread类提供的join()方法

    一个线程调用另一个线程的join()方法执行另一个线程,直到该线程执行完才继续执行自己

  • 后台线程:

    在后台运行,为其他线程服务,称为“后台线程”、“守护线程”,如JVM的垃圾回收线程

    若所有前台线程死亡,则后台线程自动死亡

    调用Thread对象的setDaemon(true)方法可将指定线程设置为后台线程(在调用start()前设置)

  • 线程睡眠:sleep

    调用Thread对象的sleep(毫秒)使线程进入阻塞(挂起)状态,在sleep过程中即使有资源也不会执行,直到sleep时间结束

  • 线程让步:yield

    yield()与sleep()相似,但yield()是使线程进入就绪状态,因此有资源时便会执行

  • 线程优先级:

    线程默认的优先级与创建它的父线程相同,默认情况下,main线程具有普通优先级

    Thread类的setPriority(),getPriority()方法可设置与获得指定线程优先级,setPriority的参数为整数1-10

线程同步:多线程操作同一数据时容易出现线程不安全的问题

  • 同步代码块

    将会被多个线程访问的对象放进obj的位置,则当某个线程访问该对象时会先将其锁定,同一时刻其他线程无法修改此对象,保证了线程安全

    public void run()
    {
      synchronized(obj)//obj称为同步监视器
        {
        ...//此处代码就是同步代码块
        }
    }
    
  • 同步方法

    使用synchronized修饰实例方法,无须显式指定同步监视器,同步方法的同步监视器是this,也就是调用该方法的对象

    public class Account
    {
      public synchronized void draw(double drawAmount)
      {
          ...//此同步方法的监视器为this,即Account对象
               //线程调用Acconut对象的draw方法时,将Account对象加锁
      }
    }
    
  • 释放同步监视器的锁定

相关文章

  • Android中的多线程

    1. Java多线程基础 Java多线程,线程同步,线程通讯 2. Android常用线程 HandlerThre...

  • 5月份第一周学习安排

    学习内容: java多线程及线程同步的方法(使用) java多线程各种同步方法的原理和优缺点 java多线程设计模...

  • 2020-07-02【多线程】

    进程 线程 多线程的实现方式1 设置/获取线程名称 线程调度 线程控制 线程生命周期 多线程实现方式2 练习 同步...

  • Java多线程(2)--线程周期、线程同步

    线程的生命周期:(新建、就绪、运行、阻塞、死亡) 新建状态:使用new关键字创建一个线程对象后既处于新建状态,由虚...

  • Java多线程目录

    Java多线程目录 Java多线程1 线程基础Java多线程2 多个线程之间共享数据Java多线程3 原子性操作类...

  • Java自学-多线程 同步synchronized

    Java 多线程同步 synchronized 多线程的同步问题指的是多个线程同时修改一个数据的时候,可能导致的问...

  • 线程池

    Java多线程 线程的同步是Java多线程编程的重点和难点,往往让人搞不清楚什么是竞争资源、什么时候需要考虑同步,...

  • Java并发编程(二)同步

    如果你的java基础较弱,或者不大了解java多线程请先看这篇文章java多线程(一)线程定义、状态和属性 同步一...

  • Java知识梳理六

    一、Java多线程一 1.谈谈线程的生命周期和状态转移 关于线程生命周期的不同状态,在Java 5以后,线程...

  • 锁与多线程同步的实现

    Java当中的锁都是为了保证多线程同步执行。如果没有锁的话,多线程是异步执行的。 什么是多线程同步? 请看下面的代...

网友评论

      本文标题:Java多线程(2)--线程周期、线程同步

      本文链接:https://www.haomeiwen.com/subject/isteixtx.html