zoukankan      html  css  js  c++  java
  • 前台线程和后台线程、线程安全

    一、线程分为前台线程和后台线程,下面是关于一些知识要点的总结:

      1)托管线程池中的线程(ThreadPool.QueueUserWorkItem()和Task创建的线程)都是后台线程,通过BeginXXX方法运行的线程都是后台线程;应用程序的主线程main()以及使用Thread构造的线程都默认为前台线程;

      2)在进程中,只要有一个前台线程未退出,进程就不会终止。主线程(main函数)就是一个前台线程。而后台线程不会阻止进程的中止,不管线程是否结束,只要所有的前台线程都退出(包括正常退出和异常退出)后,进程就会自动终止。所以,jre(java runtime environment)判断程序是否执行结束的标准是:所有的前台线程执行完毕。
      3)一般后台线程用于处理时间较短的任务,如在一个Web服务器中可以利用后台线程来处理客户端发过来的请求信息、JVM的垃圾回收线程也是一个后台线程。而前台线程一般用于处理需要长时间等待的任务,如在Web服务器中的监听客户端请求的程序,或是定时对某些系统资源进行扫描的程序。
      4)不管是前台线程还是后台线程,如果线程内出现了异常,都会导致进程的终止。
      5)可以在任何时候将前台线程修改为后台线程,方式是设置Thread.IsBackground 属性。

    二、线程安全

    线程安全:多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。
    线程不安全:不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据

    线程安全的同步的类:
    1)vector:比ArrayList多了个同步化机制(线程安全),效率低。
    2)stack:堆栈。
    3)hashtable:比hashmap多了个线程安全。(HashMap,TreeMap都是线程不安全)
    4)enumeration:枚举,相当于迭代器。
    除此之外,其他的都是非线程安全的类和接口

  • 相关阅读:
    (笔记)ubuntu中取消文件夹或文件等右下解一把锁的标志的方法
    (笔记)Linux常用命令大全
    (笔记)arm-linux-gcc/ld/objcopy/objdump参数总结
    (笔记)Ubuntu下安装arm-linux-gcc-4.4.3.tar.gz (交叉编译环境)
    (笔记)如何安装Arm-linux-gcc
    java application maven项目打自定义zip包
    几种简单的排序算法(JAVA)
    双色球机选算法java实现
    集合的子集输出(位运算方式)
    集合的子集输出(排列组合)
  • 原文地址:https://www.cnblogs.com/yangrongkuan/p/11996347.html
Copyright © 2011-2022 走看看