zoukankan      html  css  js  c++  java
  • 有关多线程的一些知识点的总结

    最近 由于时间比较充足 看了张孝祥将的java多线程实战,看了之后想结合自己的理解对java的多线程这个知识进行一个总结,鉴于面试中经常会问多线程相关的知识,而我们很多人由于自己工作年限和工作中接触到的多线程的知识其实并不是很多,所以在面试的时候会比较为难,希望我对这个的总结可以对大家掌握多线程有一些理解,当然了我自己的学习后的总结并 不一定都是对的,还是希望大家可以一块学习。好了这是我写这个随笔的一个愿望吧算是,自己学会了也希望通道中人也可以学会,let go。。。。

    我对多线程的学习总结按照下面的一个逻辑和路线来说明:

    1 实现多线程的两种方法以及区别

    2 java中定时器的实现及原理

    3 传统的实现线程互斥的一些技术及不同之处

    4 线程的同步以及线程范围内共享变量的实现方式

    5 ThreadLocal这个强大东东的侃大山,以及我们在平时的开发中 在哪里其实在不知不觉中已经在使用这个东东了呢。。

    6 java中一些不经常使用的线程安全也就是原子性操作的类的说明

    7 java5 提供的线程库 java.util.concurrent包的应用介绍。主要是Executors类的使用。这个东西大家都知道但是里面很多东西应该都没有接触过。

    8 java5 中的Callable与Future的应用  实现线程处理结果的

    9 线程中的锁以及读写锁的应用,以及锁与sychronized在实现线程互斥方面的区别

    10 java中的condition条件的用途

    11 Semaphere信号灯。以及一些同步工具类的使用

    12最后说一下有关阻塞队列 以及消息队列。

    13 做一个总结。

    今天就先说一个实现线程的两种方法,我想很多求职找工作的只要问到有关线程的这个问题应该是必问的,哈哈 我就被问到过好几次。可是对这个问题除了可以说出集成Thread类和实现runnable接口两种方式之外你还能说出一些其他的吗,如果不能的话那么可以断定你的这次面试有关线程这块应该是失败的。说到这里我们换是先去看看源码去吧:java.lang.Thread: 的构造方法init(null, null, "Thread-" + nextThreadNum(), 0L);我们看init的具体实现:

    红色的字是对这个初始化方法的一个解释。

    这里面有关secyrityManager java 安全管理器的详细知识可以去这里了解---http://blog.sina.com.cn/s/blog_48a45b950100f2lc.html

    这时候我想你可能会问我的,你这不就是对threan的初始化过程做了一个介绍吗,还有别的吗,别着急马上来,这时候我们知道启动一个线程的方法是start(),哪我们就看看Thread类中的start()方法的源码:

    看这里的start方法,不管是我们自己集成的线程子类重写的run方法也好,我们看启动的start方法是不变的,看start()方法的实现是先去判断一下当前线程的状态是否正确,如果正确就将这个线程添加到线程组中。这里我们换看到了一个start0()的方法,而且是一个native修饰的方法,

    这时候我们再看run方法的实现,里面有一个target 从上面的定义中我们可以看到target其实就是一个runnable接口,这个时候我觉着你应该明白了呗,其实不管是集成thread还是实现runnable,其实底层都是一样的,但这时候可能会问哪为什么要这样的方式来实现呢,我也查了一些资料,我觉着这样说是很有道理的:

    ① 一个类只能继承一个父类,存在局限;一个类可以实现多个接口

    ② 在实现Runable接口的时候调用Thread的Thread(Runnable run)或者Thread(Runnable run ,String name)构造方法创建进程时,使用同一个Runnable实例,如上程序中使用的都是rt,则建立的多线程的实例变量也是共享的;

    但是通过继承Thread类是不能用一个实例建立多个线程;

    故而实现Runnable接口适合于资源共享;

    当然,继承Thread类也能够共享变量,能共享Thread类的static变量;

    ③ Runnable接口和Thread之间的联系:

    public class Thread extends Object implements Runnable  可以看出Thread类也是Runnable接口的子类;

    好了我想对这两张实现线程的方式的代码就不必写了,大家应该都会。如果不会的话先打开eclipse自己写一个再说。

    2 java中有关定时器的实现:

     在我们接触到的定时器中主要由spring框架提供的quartor和java原生自带的Timer类。好了这个我们留在明天再说吧。对写的上述有不同意见的欢迎大家多多评论共同探讨。。

  • 相关阅读:
    Shape详解
    C#装箱与拆箱
    C#值类型、引用类型的区别
    C#类型简述
    C# 关键字列表
    python图片转字符画
    软件测试面试题
    python关键字以及含义,用法
    JMeter的那些问题
    APP测试功能点
  • 原文地址:https://www.cnblogs.com/duanxiaojun/p/6595847.html
Copyright © 2011-2022 走看看