序言

       说说今天遇到的一件小事吧,在遇到问题,查找答案时,看到很多人的博客里面都有提到关键字眼,可让人觉得可恨的是,大多数人写的博文中,基本上都是照着书上的语言发表的,看了跟没看一样,没有一点通俗的语言和自己关于该知识点的讲解,也有可能是觉得太简单,不用做解释,但是个人感觉,写博文,在一些自己都需要思考一段时间去理解的东西,应该把自己思考的过程,如何理解的写下来,而不是就把精华的部分复制黏贴上去,个人感觉没什么用,回想一下再写计算机网络教程学习历程的博文中,自己也有类似的情况,应该改正过来,在乎的是每篇博文的质量,而不是数量,不能有那种拼命往上面怼文章,来显示自己写了很多东西,以此用来面试,我觉得更是无用,写博文不为别人,是为了巩固我们的知识,和发表自己对一些问题的见解,这样才能真正的帮助到自己。开始今天的五题面试吧。

                                                                                ----WH

一、进程和线程的区别是什么?

      自己讲解:

          进程:拿电脑来说,在电脑上后台运行了很多程序,那就是进程

          线程:为了完成一个程序的运行,可能程序中还有很多分支在一起运行共同来完成这个程序,分支的运行就是线程

            也就是说:进程中包括很多线程,

      参考答案:

          进程是执行着的应用程序,而线程是进程内部的一个执行序列。一个进程可以有多个线程。线程又叫做轻量级进程。

      自我评价:

          大概理解,但是语言描述的不好,应用程序下有很多执行序列。 不应该说分支。

          1、进程:执行的应用程序,通俗一点,在打开电脑的任务管理器中,就有很多应用程序,也就是进程

          2、线程:进程内部的一个执行序列,通俗的讲,就是一个程序的运行,有很多线程在同时执行来共同维护该进程的运行

二、创建线程有几种不同的方式?你喜欢哪一种?为什么?

      自己解答:

          好久不用线程,这题直接不会了,哈哈,

      参考答案:

          有三种方式可以用来创建线程:
            继承Thread类
            实现Runnable接口
            应用程序可以使用Executor框架来创建线程池
            实现Runnable接口这种方式更受欢迎,因为这不需要继承Thread类。在应用设计中已经继承了别的对象的情况下,这需要多继承(而Java不支持多继承),只能实现接口。同时,           线程池也是非常高效的,很容易实现和使用。

      自我评价:

            隔得比较久,但是印象中也是只有两种创建线程的方式,一个是继承,一个是实现接口。

            1、继承Thread类,重写run方法,在run方法中写该线程要执行的任务,然后再在要执行该线程时,new出对象来,对象.start(),启动该线程

            2、实现Runnable接口,实现其中的run方法,new出该对象A来,Thread thread = new Thread(A); 这样,thread.start(),就能启动该线程。

              注意:继承Thread类局限于单继承,所以实现Runnable接口,就能在继承别的类。其实本质都一样,Thread类也实现了Runnable接口。

            3、使用executor框架来创建多线程。可以自行百度去了解一下。

三、概括的解释下线程的几种可用状态。

      自我解答:

            创建状态、运行状态、暂停状态、死亡状态         

     

      参考答案:

           1. 新建( new ):新创建了一个线程对象。

           2. 可运行( runnable ):线程对象创建后,其他线程(比如 main 线程)调用了该对象 的 start ()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获 取 cpu 的使用权 。

           3. 运行( running ):可运行状态( runnable )的线程获得了 cpu 时间片( timeslice ) ,执行程序代码。
           4. 阻塞( block ):阻塞状态是指线程因为某种原因放弃了 cpu 使用权,也即让出了 cpu timeslice ,暂时停止运行。直到线程进入可运行( runnable )状态,才有 机会再次获得 cpu timeslice 转到运行( running )状态。阻塞的情况分三种:
             (一). 等待阻塞:运行( running )的线程执行 o . wait ()方法, JVM 会把该线程放 入等待队列( waitting queue )中。
             (二). 同步阻塞:运行( running )的线程在获取对象的同步锁时,若该同步锁 被别的线程占用,则 JVM 会把该线程放入锁池( lock pool )中。
             (三). 其他阻塞: 运行( running )的线程执行 Thread . sleep ( long ms )或 t . join ()方法,或者发出了 I / O 请求时, JVM 会把该线程置为阻塞状态。            当 sleep ()            状态超时、 join ()等待线程终止或者超时、或者 I / O 处理完毕时,线程重新转入可运行( runnable )状态。
           5. 死亡( dead ):线程 run ()、 main () 方法执行结束,或者因异常退出了 run ()方法,则该线程结束生命周期。死亡的线程不可再次复生。

                   

     自我评价:不清清楚这个内容,

           1、五个状态  新建状态  -- 可运行状态  -- 运行状态  -- 阻塞状态 -- 销毁状态

            2、阻塞状态

                等待阻塞:使用wait(),然后再等待队列里面呆着。等待依次被调用

                同步阻塞:调用了某个带锁的方法,当前锁被其他线程给拿到了,就需要等待其他线程用完,然后再拿到该锁,

                其他阻塞:比如 执行了 sleep、或者 join 方法,使之线程进入了睡眠或者要等待别的线程执行完才轮到自己。

四、同步方法和同步代码块的区别是什么?

       自我解答:

            这个也不清楚。

         参考答案:

            区别:

              同步方法默认用this或者当前类class对象作为锁;
              同步代码块可以选择以什么来加锁,比同步方法要更细颗粒度,我们可以选择只同步会发生同步问题的部分代码而不是整个方法;

       自我评价:

            1、同步的单词是: synchronized     异步的单词是: asynchronized

            2、同步方法和同步代码块只得是用synchronized关键字对方法加锁,

            3、同步方法: synbhronized只对方法加锁,作用的范围就是,如果该类对象调用了该方法,则获得锁,其他线程不管是调用该带锁的方法还是非锁方法都必须等待

            4、同步代码块:对方法或者任意代码加锁,不同的是,只对获得该段代码的锁机制生效,意思就是,当A线程获得了该段代码的锁,B线程照样执行其他非带锁的方法。

五、在监视器(Monitor)内部,是如何做线程同步的?程序应该做哪种级别的同步?

       自我解答:

            几个多线程的题目顿时懵逼了,多线程这块很弱,记不住,以前看了一点,都差不多忘记了。

        参考答案:

            监视器和锁在Java虚拟机中是一块使用的。监视器监视一块同步代码块,确保一次只有一个线程执行同步代码块。每一个监视器都和一个对象引用相关联。线程在获取锁之前不允许执行同步代码。

            在 java 虚拟机中, 每个对象( Object 和 class )通过某种逻辑关联监视器,每个监视器和一个对象引用相关联, 为了实现监视器的互斥功能, 每个对象都关联着一把锁.   一旦方法或者代码块被 synchronized 修饰, 那么这个部分就放入了监视器的监视区域, 确保一次只能有一个线程执行该部分的代码, 线程在获取锁之前不允许执行该部分的代码   另外 java 还提供了显式监视器( Lock )和隐式监视器( synchronized )两种锁方案

  

       自我评价:

            1、有关于java虚拟机的一部分,在讲解如何实现锁机制的。这个感觉有点超出我自己的能力了,等看到了应该会知道,现在当时了解一下,有这个东西。

Java常考面试题(三)的更多相关文章

  1. Java常考面试题

    Java常考面试题 1. 什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? 答:Java虚拟机是一个可以执行Java字节码的虚拟机进程.Java源文件被编译成能被Java虚拟机执行 ...

  2. Java常考面试题整理(三)

    明天又要去面试,Good luck to me.,让我在这段时间换个新的工作吧. 41.在Java中,对象什么时候可以被垃圾回收? 参考答案: 当对象对当前使用这个对象的应用程序变得不可触及的时候,这 ...

  3. Java常考面试题(二)

    序言 昨天刚开始的”每日5题面试“这类文章,感觉还不错,把一些平常看似懂了的东西,弄清楚了.就像什么是虚拟机?这个问题,看起来知道,但是要说出个所以然来,又懵逼了,经常回过头来看看做过的面试题,试着用 ...

  4. Java常考面试题整理(四)

    有关所有Swing相关的面试题,都可以说是凑数的,感觉自己在敲这些的时候感觉一点用处都没有,可以从第72条开始看. 61.说出三种支持重绘(painting)的组件. 参考答案: Canvas,Fra ...

  5. Java常考面试题(二)(转)

    序言 昨天刚开始的"每日5题面试"这类文章,感觉还不错,把一些平常看似懂了的东西,弄清楚了.就像什么是虚拟机?这个问题,看起来知道,但是要说出个所以然来,又懵逼了,经常回过头来看看 ...

  6. 阿里巴巴JAVA常考面试题及汇总答案

    一.String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的? 答:   1.String是字符串常量,StringBuffer和StringB ...

  7. Java常考面试题(经典)

    什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? Java虚拟机是一个可以执行Java字节码的虚拟机进程.Java源文件被编译成能被Java虚拟机执行的字节码文件. Java被设计 ...

  8. Java常考面试题(四)

    序言 双十一那天去我女朋友那了,11.11到11.13 漏了两天的内容,今天中午刚回来的,赶紧补一下前两天漏下的博文,我相信,坚持下来,会有成长的,等到出去实习那一天,肯定会很有帮助,会感谢现在自己的 ...

  9. Java常考面试题(一)

    序言 我是一只乱飞乱撞的菜鸟,写的文章目前是以记录自己学习,和方便以后查看,期待日后不久能通过自己的努力,获得一点小小的成功,然后写出我的学习经验总结性文章来. ---WH 一.什么是虚拟机?为什么J ...

随机推荐

  1. java Map常用方法封装

      java Map常用方法封装 CreationTime--2018年7月16日15点59分 Author:Marydon 1.准备工作 import java.util.HashMap; impo ...

  2. python 之html的headers提取操作

    # -*- coding: cp936 -*- #python 27 #xiaodeng #python 之html的headers提取操作 # import urllib,urllib2 html= ...

  3. linux下编译upx 3.93

    昨天,UPX发布了3.93版本. UPX(the Ultimate Packer for eXecutables)是一个非常全面的可执行文件压缩软件,支持dos/exe.dos/com.dos/sys ...

  4. Struts2+JSON数据

    待整理 参考 http://yshjava.iteye.com/blog/1333104 http://kingxss.iteye.com/blog/1622455 JSON中,java.lang.N ...

  5. 转:Ogre源码剖析1

    初学Ogre 貌似看到一些套路(ajohn) 1 Ogre的编译  获得最新的Ogre 1.71 和之前的Ogre比起来,除了sampler集成之外,最大的改变就是编译过程加入了Cmake,这个东西其 ...

  6. HighStock如何动态添加数据组

    var charts = null;        $(function () {            var seriesIds = [830];            // Create the ...

  7. ios中通过过RGB绘制图片

    + (UIImage *) ImageWithColor: (UIColor *) color frame:(CGRect)aFrame { aFrame = CGRectMake(, , aFram ...

  8. linux shell 脚本攻略学习13--file命令详解,diff命令详解

    一.file命令详解 find命令可以通过查看文件内容来找出特定类型的文件,在UNIX/ Linux系统中,文件类型并不是由文件扩展名来决定的(windows中却正是这么做的),file命令的目的是从 ...

  9. java+win7+eclipse+Maven+sikuli 配置总结---图形脚本语言

    简介:Sikuli 是一种新颖的图形脚本语言,或者说是一种另类的自动化测试技术.它与我们常用的自动化测试技术(工具)有很大的区别. 关于配置,一直是一个问题,下面做个总体介绍,用sikuli也有几个月 ...

  10. UICollectionView Demo

    1. 利用系统自动布局UICollectionViewFlowLayout进行布局. ViewController1 #import "ViewController1.h" @in ...