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


1、地址空间和其他资源:进程间相互独立,同一进程的各线程间共享。

2、通信:进程间通信PIC,线程间可以直接读写进程数据段(如全局变量)来进行通信(需要通过进程同步和互斥手段以保证)

c.调度和切换:线程上下文切换比进程上下文切换要快得多。

d.在多线程OS中,进程不是一个可执行的实体。

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

1、继承Thread类,是Runnable接口的实现。

2、实现Runnable接口,并重写里面的run方法。

继承于Thread类的线程类,可以直接调用start方法启动线程(使用static也可以实现资源共享).一个线程(对象)只能够执行一次start(),而且不能通过Thread实现类对象的run()去启动一个线程。

实现Runnable接口的类需要再次用Thread类包装后才能调用start方法。(三个Thread对象包装一个类对象,就实现了资源共享)。

线程的使用的话,注意锁和同步的使用。(多线程访问共享资源容易出现线程安全问题)

一般情况下,常见的是第二种。

* Runnable接口有如下好处:

*①避免点继承的局限,一个类可以继承多个接口。

*②适合于资源的共享

* Thread的常用方法:

* 1.start():启动线程并执行相应的run()方法

* 2.run():子线程要执行的代码放入run()方法中

* 3.currentThread():静态的,调取当前的线程

* 4.getName():获取此线程的名字

* 5.setName():设置此线程的名字

* 6.yield():调用此方法的线程释放当前CPU的执行权(很可能自己再次抢到资源)

* 7.join():在A线程中调用B线程的join()方法,表示:当执行到此方法,A线程停止执行,直至B线程执行完毕,

* A线程再接着join()之后的代码执行

* 8.isAlive():判断当前线程是否还存活

* 9.sleep(long l):显式的让当前线程睡眠l毫秒  (只能捕获异常,因为父类run方法没有抛异常)

* 10.线程通信(方法在Object类中):wait()   notify()  notifyAll()

设置线程的优先级(非绝对,只是相对几率大些)

* getPriority():返回线程优先值

* setPriority(int newPriority):改变线程的优先级

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

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

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

3.运行(Running):可运行状态(Runnable)的线程获得了cpu时间片,执行程序代码。

4.阻塞(block):阻塞状态是指线程因为某种原因放弃了cpu的使用权,让出了cpu的时间片。暂停后,直到线程到可运行(Runnable)状态,才会有机会获得时间片转到(running)运行状态。阻塞被分为三种:

(1)等待阻塞:运行(running)的线程执行o.wait()方法,JVM会把线程放入等待队列中。

(2)同步阻塞运行( running )的线程在获取对象的同步锁时,若该同步锁 被别的线程占用,则 JVM 会把该线程放入锁池( lock pool )中。

(3). 其他阻塞: 运行( running )的线程执行 Thread . sleep ( long ms )或 t . join ()方法,或者发出了 I / O 请求时, JVM 会把该线程置为阻塞状态。            当 sleep ()状态超时、 join ()等待线程终止或者超时、或者 I / O 处理完毕时,线程重新转入可运行( runnable )状态。

5.死亡(dead):线程run()、main()方法执行结束,或者因异常退出run()方法,则该线程生命周期结束。

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

区别:

同步方法默认用this或者当前类class对象作为锁;

同步代码块可以选择以什么来加锁,比同步方法要更细颗粒度,我们可以选择只同步会发生同步问题的部分代码而不是整个方法;

同步方法使用关键字 synchronized修饰方法,而同步代码块主要是修饰需要进行同步的代码,用   synchronized(object){代码内容}进行修饰;

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

16、什么是死锁(deadlock)?

死锁就是多个进程因为竞争资源而造成的一种僵局(互相等待)。

死锁的四个条件:互斥条件、不剥夺条件、请求和保持、循环等待。

17、如何确保N个线程可以访问N个资源同时又不导致死锁?

多线程产生死锁需要四个条件,分别是互斥性,保持和请求,不可剥夺性还有要形成闭环,这四个条件缺一不可,只要破坏了其中一个条件就可以破坏死锁,其中最简单的方法就是线程都是以同样的顺序加锁和释放锁,也就是破坏了第四个条件。

18、java集合类框架的基本接口有哪些?

集合类接口指定了一组叫做元素的对象。集合类接口的每一种具体的实现类都可以选择以它自己的方式对元素进行保存和排序。有的集合类允许重复的键,有些不允许。

java集合类提供了一套设计良好的支持对一组对象进行操作的接口和类。

Collection:代表一组对象,每一个对象都有它的子元素。

Set:不包含重复元素的Collection

List:有顺序的Collocation,并且包含重复元素

Map:可以把键(key)映射到值(value)的对象,键不能重复。

19、为什么集合类没有实现cloneable和serializeble接口?

克隆(cloning)或者是序列化(serialization)的语义和含义是跟具体的实现相关的,应该由集合类的具体实现来决定如何来克隆或者是序列化。

20、什么是迭代器(lterator)?

迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。  

Java中的Iterator功能比较简单,并且只能单向移动:  

(1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。  

(2) 使用next()获得序列中的下一个元素。  

(3) 使用hasNext()检查序列中是否还有元素。  

(4) 使用remove()将迭代器新返回的元素删除。  

Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。

牛客网---Java题库(11~20)相关推荐

  1. python爬取学校题库_如何使用 Python 爬虫爬取牛客网 Java 题库?

    [原文链接]http://www.changxuan.top/?p=146 由于"打怪"失败,最近一直在牛客网上刷题复习备战春招.其中有个 Java专题复习题库,我刷着刷着就想把它 ...

  2. 如何使用 Python 爬虫爬取牛客网 Java 题库?

    [原文链接]http://www.changxuan.top/?p=146 由于"打怪"失败,最近一直在牛客网上刷题复习备战春招.其中有个 Java专题复习题库,我刷着刷着就想把它 ...

  3. 牛客网——华为题库(11~20)

    华为题库 11.数字颠倒 12.字符串反转 13.句子逆序 14.字符串排序 15.求int型正整数在内存中存储时1的个数 16.购物单 17.坐标移动 18.识别有效的IP地址和掩码并进行分类统计 ...

  4. 牛客网---Java题库(21~30)

    21.lterator和Listlterator的区别是什么? literator可用来遍历Set和List集合,但是Listlterator只能用来遍历List. Iterator对集合只能是前向遍 ...

  5. 牛客网---Java题库(1~10)

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

  6. 牛客网 Java 工程师能力评估 20 题 - 详解

    牛客网 Java 工程师能力评估 20 题 - 详解 不知在看博客的你是否知道 牛客网,不知道就太落后了,分享给你 : 牛客网 此 20 题,绝对不只是 20 题! 免责声明:本博客为学习笔记,如有侵 ...

  7. 牛客网sql题库(1-30题)—— 个人答案与过程解析

    本篇博客分享一下我在牛客网sql题库刷题时,自己敲出来的结果.结果均通过了牛客网的结果验证. 具体的题目就不放在博客中了,感兴趣可以自行去搜索牛客网,找到sql题库在线编程 每道题下面都有我自己写的题 ...

  8. 牛客网-SQL题库笔记

    牛客网-SQL题库笔记 01.最晚入职员工的所有信息 02.查找入职员工时间排名倒数第三的员工所有信息 03.查找各个部门当前领导当前薪水详情以及其对应部门编号 04.查找所有已经分配部门的员工的la ...

  9. 牛客网-Java专项练习11

    牛客网-Java专项练习11 1.关于抽象类和接口叙述正确的是? ( ) A.抽象类和接口都能实例化的 B.抽象类不能实现接口 C.抽象类方法的访问权限默认都是public D.接口方法的访问权限默认 ...

最新文章

  1. 线程安全的集合类、CopyOnWrite机制介绍(转)
  2. 医疗信息化、医学相关资料下载
  3. webstorm github怎么用_前端开发神器WebStorm发布最新版本2019.3,代码完成更加智能...
  4. app信息:PackageInfo+ApplicationInfo+ActivityInfo/ServiceInfo/ProviderInfo+PermissionInfo+...
  5. kitten编程猫里的函数定义,函数实现和函数调用原理
  6. 动画专业艺术里最懂计算机的,美国数字媒体艺术专业了解一下!
  7. pycharm python 模板配置_pycharm设置python脚本模板
  8. 永久免费!原型设计利器摹客RP正式发布
  9. IOS中单例的简单使用
  10. 艾伟_转载:扩展方法 之 基本数据篇
  11. win7下安装VC6LineNumberAddin方法[VC6行号插件]
  12. 用C++获取屏幕上某点的颜色
  13. flume学习(六):如何使用event header中的key值
  14. 港股美股打新截然不同!教你玩转美股打新
  15. 淘宝广告数据分析实战!(附代码和100W数据源)
  16. 《美国工厂》:一座中国工厂在数万英里之外的异域镜像
  17. linux的pv原语
  18. word使用的奇技淫巧
  19. C语言大型连续剧(第一集)——Hello!C先生
  20. Win7笔记本如何调整屏幕亮度

热门文章

  1. Java Selenium - 处理页面弹出窗
  2. Salt 系统初始化
  3. atitit.细节决定成败的适合情形与缺点
  4. HDOJ(HDU) 2186 悼念512汶川大地震遇难同胞——一定要记住我爱你
  5. virsh default启动失败原因分析及解决
  6. 关于指向堆的指针内涵
  7. [ASP]没有权限: 'CreateObject'
  8. 武汉大学 RSIDEA 团队开源LoveDA:可同时推进语义分割和迁移学习
  9. 高效大规模图像搜索开源实现
  10. 为什么学习Python数据分析,python数据分析有什么用?