zoukankan      html  css  js  c++  java
  • Java并发总结


    什么是线程?

    一个程序同时执行多个任务,每个任务称为一个线程(thread)。可以同时运行一个以上线程的程序被成为多线程程序(multithread)

    创建一个线程并执行

    new Thread().start();


    中断线程

    当线程的run方法执行方法体中最后一条语句后,并经由执行return语句返回时,或者出现了在方法中没有捕获的异常时,线程将终止。

    没有可以强制线程终止的方法,但interrupt方法可以用来请求终止线程。


    线程状态

    线程有6种状态

    New(新建)
    Runnable(可运行)
    Blocked(被阻塞)
    Waiting(等待)
    Timed waiting(计时等待)
    Terminated(终止)

    New(新建)
    当用new创建一个新线程对象时,线程处于新建状态
    Thread t = new Thread();

    Runnable(可运行)
    一旦调用start(),线程处于runnable状态,可能正在运行,也可能没在运行,这取决于系统给线程提供运行的时间。

    抢占式调度系统会给每一个可运行线程一个时间片来执行任务,当时间片用完,操作系统剥夺该线程的运行权,并给另一线程运行机会,当选择下一个线程时,操作系统考虑线程的优先级。

    Blocked(被阻塞)
    当一个线程试图获得一个内部的对象锁,而锁被其他线程持有,则该线程进入阻塞状态

    Waiting(等待)
    当线程等待另一个线程通知调度器一个条件时,进入waiting(等待)状态

    Timed waiting(计时等待)
    有几个参数有一个超时参数,调用它们导致线程进入计时等待状态。这一状态将一直保持到超时期满或者接到适当通知

    Terminated(终止)
    线程因如下两个原因之一而终止:
    因run方法正常退出而自然死亡
    因为一个没有捕获的异常终止了run方法而意外死亡


    线程属性

    线程优先级
    每个线程有一个优先级。默认情况下,一个线程继承自父线程的优先级,调用setPriority()设置。线程优先级高度依赖于系统,Windows有7个优先级,Oracle为Linux提供的JVM线程优先级被忽略

    守护线程

    t.setDaemon(true) 可以将线程转换为一个守护线程。守护线程的唯一用途是为其他线程提供服务
    当只剩下守护线程时,JVM就退出了

    线程组

    线程组是一个可以统一管理的线程集合,默认情况下,创建的所有线程属于相同的集合,但也可以创建其他组

    处理未捕获异常处理器

    线程的run方法不能抛出受查异常,但非受查异常会导致线程终止。在线程死亡前,该异常被传递到一个用于未捕获异常的处理器。

    该处理器实现了Thread.UncaughtExceptionHandler接口

    如果不为独立的线程安装处理器,此时的处理器就是该线程的ThreadGroup对象

    竞争条件(race condition),两个或两个以上的线程需要共享对同一数据的存储。

    Java中有两种机制防止代码块受并发访问的干扰。synchronized关键字,ReentrantLock类。

  • 相关阅读:
    TFS应用层服务器获取F5用户的真实IP地址(高可用性)
    安装TFS(2015)工作组模式代理服务器(Agent)
    Team Foundation Server 15 功能初探
    TFS 2013 生成(构建)历史记录保持策略(Retention Policy)
    TFS代码变更和工作项关联,为系统变更提供完美的跟踪轨迹
    修改TFS客户端的工作区类型
    比较TFS与SVN,你必须知道的10点区别
    数据字典
    查看源码 类图结构图(Eclipse + Idea)
    Mybatis对应的java和数据库的数据类型
  • 原文地址:https://www.cnblogs.com/minguo/p/10815546.html
Copyright © 2011-2022 走看看