zoukankan      html  css  js  c++  java
  • 第五章:多线程深入话题

    优雅的停止线程

       在多线程操作之中如果要启动多线程肯定使用的是Thread类中的start()方法,而如果对于多线程需要进行停止处理,Thread类原本提供的有stop方法,但是对于这些方法从jdk1.2之后就已经将其废除了,而且一直到现在也不再建议使用了,而除了stop()方法之外,还有几个方法也被禁用了:

      

    之所以废除掉这些方法,主要的原因是因为这些方法有可能导致线程的死锁,所以从jdk1.2开始就都不建议使用了,那现在我要停止线程需要怎么做呢?

    凡是强制性停止的就会导致线程死锁

    后台守护线程

      现在假设有一个人,这个人有一个保镖,那么这个保镖一定是在这个人活着的时候进行守护,一旦这个人死了,保镖就没用了。所以在多线程里面可以进行守护线程的定义,也就是说如果现在主线程的程序或者其它的线程还在执行的时候,那么守护线程将一直存在,并且运行在后台状态。

      在Thread类里面提供有如下的守护线程的操作方法:

      可以发现所有的守护线程都是围绕在用户线程的周围,如果程序执行完毕了,守护线程也就消失了,在整个JVM里面最大的守护线程就是GC线程。

      程序执行中GC线程会一直存在,如果程序执行完毕,GC线程也将消失

    volatile关键字

       在多线程的定义之中,volatile关键字主要是在熟悉定义上使用的,表示此属性为直接数据操作,而不进行副本的拷贝处理。这样在一些书上就将其错误的理解为同步属性了。

    而如果一个属性上追加了volatile关键字,表示的就是不使用副本,而是直接操作员是变量,相当于节约了:拷贝副本、重新保存的步骤

    volatile可以更快的进行变量的修改处理。

    面试题:请解释volatile与synchronized的区别?

      volatile主要在属性上使用,而synchronized是在代码块与方法上使用的;

      volatile无法描述同步的处理,它只是一种直接内存的处理,避免了副本的操作,而synchronized是实现同步的

  • 相关阅读:
    linux 内核定时器 timer_list详解
    linux2.6源码分析之解压内核映像 head.s
    [C#]我自己写的一个对字节中每位进行修改值的函数
    Android Intent调用大全
    proguard 原理
    何为夫妻?何为家?何为幸福?
    生命只是瞬间,而有些人终究是过客?(转)
    bind端口复用
    在android开发中应该如何管理内存或者是在开发过程中应该注意哪些问题来较少OOM?
    W/ActivityManager( 1419): Activity is launching as a new task, so cancelling activity result.
  • 原文地址:https://www.cnblogs.com/djlindex/p/11226511.html
Copyright © 2011-2022 走看看