zoukankan      html  css  js  c++  java
  • java 面试题摘要

    5.1 什么是线程

      线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程的实际运作单位,

      可以使用多线程对运算提速。

    5.2 线程和进程有什么区别

     (1)进程是资源的分配和调度的一个独立单元,而线程是CPU调度的基本单位

     (2)同一个进程中可以包括多个线程,并且线程共享整个进程的资源,一个进程至少包括一个线程

     (3)进程的创建需要fork或者vfork,而线程的创建用ptheread create,进程结束后它拥有的所有线程都将销毁,而线程的结束不会影响同一个进程中其他线程的结束

     (4)线程是轻两级的进程,它的创建和销毁所需要的时间比进程小很多,所有操作系统中的执行功能都是创建线程去完成的

       (5)线程中执行时一般都要进行同步和互斥,因为他们共享同一进程的所有资源。

    5.3 如何在 Java 中使用新线程

      java.lang.Thread 类的实例就是一个线程但是它需要调用java.lang.Runnable接口来执行,

      由于线程类本身就是调用的Runnable接口所以你可以继承 java.lang.Thread 类或者直接调用Runnable接口来重写run()方法实现线程。

    5.4 start() 和 run() 有什么区别

     (1)run 只是运行这个方法,并不会开启一个新的线程

     (2)start是开启一个新线程,并且运行run方法

    5.5 Thread.join 方法有什么用

      Thread.join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。

    比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。

    5.6 假如新建T1、T2、T3三个线程,如何保证它们按顺序执行?

      (1)使用 Thread.join 方法

      (2)使用 synchronized 关键字

      (3)使用 ReenreantLock类    

              ReentrantLock() : 创建一个ReentrantLock实例

              lock() : 获得锁

              unlock() : 释放锁

    5.7 volatile 变量是做什么的

      volatile是Java提供的一种轻量级的同步机制,在并发编程中,它也扮演着比较重要的角色。同synchronized相比(synchronized通常称为重量级锁),volatile更轻量级

    5.8 如果一个线程中发生了异常会怎么样

         ① 如果该异常被捕获或抛出,则程序继续运行。 
      ② 如果异常没有被捕获该线程将会停止执行

    5.9 什么是 ThreadLocal 变量

      ThreadLocal变量就是和线程绑定的变量.实际上是一个Map,,,key是对应的线程,值则是该变量. 调用ThreadLocal的get方法时则会到Map中查询当前线程是否已拥有该变量,如果没有则新建一个并保存到Map中.有的话直接返回与该线程绑定的变量.

    5.10 什么是线程池,为什么要使用

      (1)线程池是指在初始化一个多线程应用程序过程中创建一个线程集合,线程池主要用来解决线程生命周期开销问题和资源不足问题

      (2)为什么要使用:

        (1)提高重用性

        (2)减少开支

        (3)控制线程池的并发数

        (4)便于管理线程

    5.11 Thread.sleep 和 wait 方法有什么不同

      (1)sleep 是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep 不会释放对象锁。

      (2)wait 是Object 类的方法,对此对象调用wait 方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify 方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

      (3)sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常。

      (4)sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。

    5.12 synchronized 关键词是做什么的

      (1)这个关键字用于修饰方法。它的原理是:被sychronized关键词修饰的方法,在调用对象的时候,会独占该对象,在方法执行结束之前,不允许其它方法使用该对象。

    5.12 volatile 关键字 

      当一个共享变量被volatile修饰时,它会保证修改的值立即被更新到主存“。

      volatile特性

      内存可见性:通俗来说就是,线程A对一个volatile变量的修改,对于其它线程来说是可见的,即线程每次获取volatile变量的值都是最新的。

      volatile的使用场景

      通过关键字sychronize可以防止多个线程进入同一段代码,在某些特定场景中,volatile相当于一个轻量级的sychronize,因为不会引起线程的上下文切换,但是使用volatile必须满足两个条件:

      1、对变量的写操作不依赖当前值,如多线程下执行a++,是无法通过volatile保证结果准确性的;

      2、该变量没有包含在具有其它变量的不变式中。

  • 相关阅读:
    数据库的存储过程、数据库设计范式、数据库关系
    谈谈窗体之间的数据交互
    hdu2141AC代码分享
    参考C++STL标准库中对了的使用方法
    背包类问题解答——poj3624分析
    ACM第一天研究懂的AC代码——BFS问题解答——习题zoj2165
    洛谷——P2483 [SDOI2010]魔法猪学院
    洛谷——P2822 组合数问题
    COGS——T 2739. 凯伦和咖啡
    洛谷—— P3225 [HNOI2012]矿场搭建
  • 原文地址:https://www.cnblogs.com/oukele/p/9470611.html
Copyright © 2011-2022 走看看